Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止Maven在src/test/java中编译在生成源代码阶段生成的类?_Java_Maven - Fatal编程技术网

如何防止Maven在src/test/java中编译在生成源代码阶段生成的类?

如何防止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

在我们的jOOQ集成测试中,我们使用jOOQ代码生成插件将类生成到
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中编译生成的类吗?但这难道不意味着您的测试也不可编译吗?还是我遗漏了什么?