我有一个大型的Maven项目,里面有几个模块。当我想从一个模块运行JUnit测试时,我在包含所有模块的目录中运行'mvn -Dtest = NameOfTest test'。当我运行此命令时,Maven会遍历每个模块并尝试编译它(虽然它已经编译),这涉及复制一堆文件并增加测试的总时间。似乎Maven surefire插件的'test'命令执行测试的所有步骤。我想知道是否有办法只执行测试步骤,而不是为所有尝试编译和复制文件而烦恼。
以下是测试开始前的一些输出:
[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]
它为每个其他模块重复此操作。总而言之,在实际开始测试之前需要一两分钟。有没有人知道如何让测试运行而不必事先打扰所有的编译?如果我还有其他信息,请告诉我。
答案 0 :(得分:54)
如果你想要做的只是运行生命周期的测试阶段而不运行所有前面的阶段,你也可以调用绑定到测试阶段的目标:
mvn surefire:test
或者如果您只想运行一个测试
mvn -Dtest=NameOfTest surefire:test
答案 1 :(得分:0)
从测试所在的模块中运行测试有什么问题?这样,Maven就不会尝试构建您不感兴趣的其他模块。
答案 2 :(得分:-2)
如果您只想跳过cmd行的测试编译,请使用-Dmaven.test.skip=true
。
我还应该指出,虽然maven.test.skip
将不编译任何测试,但它会执行任何已进入<testOutputDirectory>
的编译测试。
根据maven-resources-plugin中skip
的文档,应使用上面的maven.test.skip
arg跳过复制测试资源。
将此设置为“true”以绕过复制测试资源。它的用途不是 推荐,但偶尔也很方便。用户属性是: maven.test.skip。