簡體   English   中英

如何防止 Maven 編譯 src/test/java 中的類,這些類是在 generate-sources 階段生成的?

[英]How to prevent Maven from compiling classes in src/test/java, which are generated during the generate-sources phase?

在我們的 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階段進行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/javasrc/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變量中?

一種解決方法(不是很漂亮)是從編譯器插件中排除測試類:

<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>

我絕對希望有更好的解決方案!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM