Генератор Ant / Jooq - путь к библиотекам jooq, импортированным с помощью maven

У меня есть многомодульный maven проект, и я реализую ant задачу по генерации jooq классов непосредственно из jpa сущностей.

Я имею в виду следующие учебные пособия:

Моя задача муравья, которая дает мне ошибки, такова (я считаю, потому что путь к классам не установлен):

<target name="02-gen-jooq">
    <java   classname="org.jooq.util.GenerationTool"
            fork="true"
            failonerror="true"
            logerror="true">

        <arg value="/jooq-config.xml"/> <!-- my jooq config file in project root folder -->
        <classpath>
            <!--
            <pathelement location="?"/> // what to put here??
            <pathelement location="?"/>
            <pathelement location="?"/>
            -->
        </classpath>
    </java>
</target>

Приведенная ошибка:

Ошибка: не удалось найти или загрузить основной класс org.jooq.util.GenerationTool

В учебнике путь к классам задается следующим образом:

<pathelement location="/path/to/jooq-3.5.4.jar"/>

но кажется, что библиотеки были импортированы вручную. Что ставить, если библиотеки импортированы с maven?


person Marko Pacak    schedule 30.01.2018    source источник
comment
Глупый вопрос, почему вы используете Ant, когда у вас есть Maven?   -  person Simon Martinelli    schedule 31.01.2018
comment
@SimonMartinelli Я использую Ant для создания настраиваемых шагов сборки и Maven только для загрузки библиотек   -  person Marko Pacak    schedule 31.01.2018


Ответы (1)


Использование Ant в автономном режиме

Вы должны поместить все эти jar-файлы в свой путь к классам ant, если хотите запустить генерацию кода вне Maven:

  • Драйвер JDBC
  • jooq- {версия} .jar
  • jooq-meta- {версия} .jar
  • jooq-codegen- {версия} .jar

См. Также: https://www.jooq.org/doc/latest/manual/code-generation/codegen-configuration

Использование Ant из Maven

Раздел руководства, который вы связали, показывает, как использовать maven-antrun-plugin:

<!-- Run the code generation task -->
<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.8</version>
  <executions>
    <execution>
      <phase>generate-sources</phase>
      <configuration>
        <tasks>
          <java fork="true" 
                classname="org.jooq.util.GenerationTool"
                classpathref="maven.compile.classpath">
              <arg value="/path/to/configuration.xml"/>
          </java>
       </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>

  <dependencies>
    <dependency>
      <!-- JDBC driver -->
    </dependency>
    <dependency>
      <groupId>org.jooq</groupId>
      <artifactId>jooq-codegen</artifactId>
      <version>${jooq.version}</version>
    </dependency>
  </dependencies>
</plugin>

Важная строка:

classpathref="maven.compile.classpath"

Таким образом, путь класса Maven передается процессу ant, запускающему генератор кода jOOQ. Если вы поместите этот плагин в профиль Maven, вы можете запустить его явно из командной строки, в противном случае это не повлияет на жизненный цикл сборки Maven.

Конечно, вам, вероятно, лучше использовать плагин jooq-codegen-maven, как описано здесь:

https://www.jooq.org/doc/latest/manual/code-generation/codegen-maven

person Lukas Eder    schedule 31.01.2018
comment
Разве это не будет генерировать jooq исходный код каждый раз, когда я строю? Цель моего вопроса - создать одного муравья target, на которого я могу щелкать отдельно в любое время, когда мне нужно. Обратите внимание, что мои знания о сборке maven очень ограничены - person Marko Pacak; 31.01.2018
comment
Вы можете использовать профиль Maven, который можно вызывать явно с помощью -P profile name. Если вы укажете, что вывод генерации кода находится внутри каталога /src/main/java (а не /target), тогда он станет полностью независимым от жизненного цикла сборки Maven. В общем, действительно стоит перейти с ant на Maven. Тем не менее, я добавлю несколько дополнительных частей к ответу для конфигураций только для муравьев. - person Lukas Eder; 31.01.2018
comment
для будущих читателей я перешел на maven, и от этого можно только выиграть - person Marko Pacak; 01.02.2018