48

我有一个大型 Maven 项目,其中有几个模块。当我想从一个模块运行 JUnit 测试时,我在包含所有模块的目录中运行“mvn -Dtest=NameOfTest test”。当我运行这个命令时,Maven 会遍历每个模块并尝试编译它(尽管它已经编译),这涉及复制一堆文件并增加测试的总时间。Maven surefire 插件的“测试”命令似乎执行了测试之前的所有步骤。我想知道是否有一种方法可以只执行测试步骤,而不必为所有尝试的文件编译和复制而烦恼。

以下是测试开始前的一些输出:

[INFO] 
[INFO] --- build-helper-maven-plugin:1.5:add-test-source (add-test-source) @ module1 ---
[INFO] Test Source directory: <directory in module1 with some generated sources> added.
[INFO] 
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ module1 ---
[debug] execute contextualize
[INFO] Copying 108 resources
[INFO] Copying 1113 resources
[INFO] Copying 1 resource
[INFO]

它对每个其他模块重复此操作。总而言之,它需要一两分钟才能真正开始测试。有谁知道让测试运行而无需事先进行所有编译的方法?如果我应该提供更多信息,请告诉我。

4

3 回答 3

84

如果您想做的是只运行生命周期的测试阶段而不运行所有先前的阶段,您还可以调用绑定到测试阶段的目标:

mvn surefire:test

或者如果您只想运行一项测试

mvn -Dtest=NameOfTest surefire:test
于 2013-02-15T08:26:43.763 回答
1

简单地从测试所在的模块中运行测试有什么问题?这样,Maven 将不会尝试构建您不感兴趣的其他模块。

于 2013-02-14T19:19:39.650 回答
-5

如果您只想跳过 cmd 行中的测试编译,请使用-Dmaven.test.skip=true.

我还应该指出,虽然maven.test.skip不会编译任何测试,但它会执行任何进入<testOutputDirectory>.

根据skip来自 maven-resources-plugin 的文档,应使用maven.test.skip上面的 arg 跳过测试资源的复制。

将此设置为“true”以绕过测试资源的复制。不推荐使用它,但有时很方便。用户属性是:maven.test.skip。

于 2013-02-14T18:51:23.697 回答