如何将另一个测试源文件夹添加到Maven并将其编译到单独的文件夹?
我有src/test/java
的默认src/test/java
文件夹。 单独的文件夹src/integration/java
可用于集成测试。
我配置了maven-surefire-plugin
来执行各自阶段的单元/集成测试。 当编译的类位于正确的目录中时,这非常有用。 不幸的是,Maven只支持一个测试源文件夹和一个测试输出文件夹。
使用mavens build-helper插件,我可以添加另一个测试源文件夹,但编译后的类将生成到test-classes
但我想将类从src/integration/java
编译为target/integration-test-classes
。 这可能吗?
src/test/java > target/test-classes src/integration/java > target/integration-test-classes
PS:我不喜欢这种排除/包含在包基础上的解决方案(从默认测试阶段排除所有**/it/**
文件,并从集成阶段排除所有**/unit/**
。
对不起,没有办法做到这一点,恕我直言,即使有一些黑客入侵。 这个概念是,编译的类只有一个目标目录,而编译的测试类只有一个目标目录(甚至
标签模式暴露了这个)。 说实话,我真的不认为Maven应该可行。 Maven通过使用精心设计的模块,促进您的应用程序的直接,干净和清晰的设计。
如果认为你真正想要做的是实际创建集成测试模块。 事实上,这是常见的做法。 到目前为止,我总是有单独的集成测试模块,从来没有遇到过问题。 您当然应该依赖于运行这些测试所需的所有模块。 您可以使用
和依赖声明来依赖其他模块的测试类,如下所述:
http://maven.apache.org/guides/mini/guide-attached-tests.html
但是,我不喜欢这种方法,并且通常更喜欢单独的模块和测试支持的东西,比如JUnit测试用例的基类等。
基于您所编写的内容,听起来您没有正确命名集成测试,并且您没有使用maven-failsafe-plugin进行集成测试。 根据maven-failsafe-plugin的惯例,您应该将您的集成测试命名为*IT.java
。 如果您恰当地命名了集成测试,则可以使用或多或少的配置来处理它,如下所示:
[...] [...] org.codehaus.mojo build-helper-maven-plugin 1.9.1 add-test-source generate-test-sources add-test-source src/integration/java [...] [...]
通过上述内容,可以将集成测试保存在同一模块中。 但这并不能解决将已编译的集成测试类放入单独的文件夹的想法。
有时最好有一个单独的集成测试模块,它只包含集成测试(导致多模块构建)。 如果您希望保留Maven的约定,您可以尝试配置maven-compiler-plugin以使用不同的输出路径(例如, target/integration-tests/classes
),这些路径认为不会真正起作用。
如果您只想更改unit testing源文件夹(而不是添加另一个),只需更改testSourceDirectory
元素:
${project.basedir}/src/test/groovy
如果所有unit testing都是用groovy编写的,那么这很有用。 (但是你也需要配置maven来编译你的groovy代码 – 参见groovy-eclipse-maven-plugin或build-helper-maven-plugin 。)