如何防止Maven在src/test/java中编译在生成源代码阶段生成的类?
在我们的jOOQ集成测试中,我们使用jOOQ代码生成插件将类生成到如何防止Maven在src/test/java中编译在生成源代码阶段生成的类?,java,maven,Java,Maven,在我们的jOOQ集成测试中,我们使用jOOQ代码生成插件将类生成到src/test/java目录中。我们这样做是因为: 我们希望签入生成的源代码,以便更容易地在代码生成器中检测回归 生成的类由测试使用 因此,(简化的)插件配置如下所示: org.jooq jooq codegen maven 一些身份证 生成源 生成 src/test/java 不幸的是,这似乎使Maven认为,在编译阶段也需要编译由此生成的类,如以下日志输出所示: [INFO]--maven编译器插件:3.8.1:co
src/test/java
目录中。我们这样做是因为:
- 我们希望签入生成的源代码,以便更容易地在代码生成器中检测回归
- 生成的类由测试使用
org.jooq
jooq codegen maven
一些身份证
生成源
生成
src/test/java
不幸的是,这似乎使Maven认为,在编译
阶段也需要编译由此生成的类,如以下日志输出所示:
[INFO]--maven编译器插件:3.8.1:compile(默认编译)@---
[信息]将25个源文件编译为C:\…\target\classes
[信息]
[信息]---maven编译器插件:3.8.1:testCompile(默认testCompile)@---
[信息]将25个源文件编译为C:\…\target\test类
。。。这毫无意义。在src/main/java
和src/test/java
作为compileSourceRoots
包含时调试输出提示:
[DEBUG]使用基本配置程序-->
[DEBUG](f)compileSourceRoots=[C:\…\src\main\java,C:\…\src\test\java]
对于记录,在testCompile
阶段,正如预期的那样,只有src/test/java
被放置在compilesourceoots
路径上:
[DEBUG]使用基本配置程序-->
[DEBUG](f)compileSourceRoots=[C:\…\src\test\java]
为了记录在案,我们使用的是Maven 3.6.2
如何防止src/test/java
目录被添加到compileSourceRoots
变量中?一个解决方法(不是很好)是从编译器插件中排除测试类:
org.apache.maven.plugins
maven编译器插件
com/example/test/***.java
另一个是使用生成测试源
阶段,这是我们迄今为止避免的,因为在编译
阶段之前,我们已经想测试一些不相关的副作用:
生成测试源
我当然希望有更好的解决方案 您只需执行
mvn clean安装-DskipTests
@papaya:不,我不能。事实上,我甚至不能-Dmaven.test.skip=true
。但是这个问题比你想象的要复杂得多。是否可以选择将执行阶段从生成源代码更改为生成测试源代码?@DavidJansen:是的,请看,尽管我想1)避免它,2)至少要理解为什么会发生这种情况。那么您想排除在src/test/java中编译生成的类吗?但这难道不意味着您的测试也不可编译吗?还是我遗漏了什么?