![](/img/trans.png)
[英]maven generate-sources -identify generated source paths from a plugin
[英]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/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
變量中?
一種解決方法(不是很漂亮)是從編譯器插件中排除測試類:
<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.