Как запретить Maven компилировать классы в src / test / java, которые генерируются на этапе создания источников? - PullRequest
0 голосов
/ 14 февраля 2020

В наших интеграционных тестах jOOQ мы используем плагин генерации кода jOOQ для генерации классов в каталог src/test/java. Мы делаем это потому, что:

  • Мы хотим проверять сгенерированные источники, чтобы мы могли легче обнаруживать регрессии в генераторе кода
  • Сгенерированные классы используются тестами

Итак, (упрощенная) конфигурация плагина выглядит следующим образом:

<plugin>
  <groupId>org.jooq</groupId>
  <artifactId>jooq-codegen-maven</artifactId>
  <executions>
    <execution>
      <id>some-id</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <generator>
          <target>
            <directory>src/test/java</directory>
          </target>
        </generator>
      </configuration>
    </execution>
  </executions>
</plugin>

К сожалению, это, кажется, заставляет Maven полагать, что сгенерированные таким образом классы должны быть скомпилированы также во время фаза compile, как видно из следующего лога:

[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ ... ---
[INFO] Compiling 25 source files to C:\...\target\classes
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ ... ---
[INFO] Compiling 25 source files to C:\...\target\test-classes

... который вообще не имеет смысла. Отладочные выходные подсказки для обоих src/main/java и src/test/java включаются как compileSourceRoots:

[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile' with basic configurator -->
[DEBUG]   (f) compileSourceRoots = [C:\...\src\main\java, C:\...\src\test\java]

Для записи, во время фазы testCompile, как и ожидалось, только src/test/java помещается на compileSourceRoots путь:

[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile' with basic configurator -->
[DEBUG]   (f) compileSourceRoots = [C:\...\src\test\java]

Для записи мы используем Maven 3.6.2

Как я могу предотвратить добавление каталога src/test/java в переменную compileSourceRoots

1 Ответ

0 голосов
/ 14 февраля 2020

Обходной путь (не очень симпатичный) - исключить тестовые классы из плагина компилятора:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>com/example/test/**/*.java</exclude>
        </excludes>
    </configuration>
</plugin>

Другой вариант - использовать фазу generate-test-sources, которой мы до сих пор избегали из-за некоторой не связанной побочные эффекты, которые мы хотели проверить уже перед фазой compile:

<phase>generate-test-sources</phase>

Я определенно надеюсь на лучшее решение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...