我install
我的Maven项目:为什么Maven在JAR已经存在的时候再次运行测试?
mvn clean install
一切工作正常,在/target
目录中创建JAR文件。现在我再次运行它:
mvn install
Maven的重新执行单元测试和静态代码分析。我没有对.java
文件进行任何更改,并且JAR在那里,那么为什么要再次运行测试呢?我做错了什么或者它是如何设计的?
我install
我的Maven项目:为什么Maven在JAR已经存在的时候再次运行测试?
mvn clean install
一切工作正常,在/target
目录中创建JAR文件。现在我再次运行它:
mvn install
Maven的重新执行单元测试和静态代码分析。我没有对.java
文件进行任何更改,并且JAR在那里,那么为什么要再次运行测试呢?我做错了什么或者它是如何设计的?
现在我跑一遍(...)Maven运行单元测试,并再次
静态代码分析因为这是你问什么简单的Maven做。
当您调用build phase时,Maven不仅会执行该构建阶段,还会执行被调用构建阶段之前的每个构建阶段。因此,调用:
mvn install
运行前,每次构建阶段install
(validate
,compile
,test
,package
等),执行install
,你也必然会这些阶段的插件前。
尽管Maven确实支持Java源代码的增量编译,但其他插件并不那么聪明,并且会再次被触发。
现在,一些言论/建议:
install
,如果你没有任何改变的地步?多模块项目,具有广泛的测试和静态代码分析。我运行
mvn clean install
,然后在一个模块中更改一个单独的java文件。然后我运行mvn install
,期望maven只测试/分析这个已更改的特定模块。不幸的是,它重新测试并重新分析所有模块。
事实上,如果你运行mvn install
作为反应器构建的一部分,将运行在所有模块和测试和分析mvn install
将再次上所有模块。这可能不是你所期望的,但这就是你会得到的(AFAIK,静态分析插件没有意识到变化 - 我无法解释为什么事情不会更好)。
需要这么多时间。
我建议使用the advanced reactor options来构建模块的一个子集。这些选项包括:
-rf, --resume-from
Resume reactor from specified project
-pl, --projects
Build specified reactor projects instead of all projects
-am, --also-make
If project list is specified, also build projects required by the list
-amd, --also-make-dependents
If project list is specified, also build projects that depend on projects on the list
所以你的情况,你可以运行像(假设你感动module-foo
):
mvn -pl module-foo,my-packaged-app install
,或者重建依赖于module-foo
所有项目:
mvn -pl module-foo -amd install
不幸的是,这是如何设计maven install
插件。它执行最佳实践,比如在安装之前始终运行测试,因为即使代码没有,其他环境因素也可能发生变化。
如果你只是想以增量编译(即只有自上次编译后更改过的那些文件),那么你应该通过调用mvn compile
使用compiler
插件,然后建立罐子使用mvn jar:jar
。
跳过测试:mvn -Dmaven.test.skip=true install
。
其实,'install'是一个阶段,而不是插件。不,你不应该使用'jar:jar',而是使用'package'阶段(这就是构建生命周期的阶段)。 – 2010-11-02 11:18:03
是的,“安装”是安装插件运行的阶段。同样,Compiler插件在“编译”阶段使用。 – dogbane 2010-11-02 12:00:06
我的观点是,1.插件不执行任何事情,构建生命周期(安装插件不会触发例如测试)。 2.你通常调用阶段,而不是插件。 – 2010-11-02 15:50:42
'test'是'构建'生命周期中的默认阶段。如果你想跳过在测试过程中安装内容添加到pom.xml中,
<build>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</build>
,然后创建一个配置文件说,“测试”将包含测试配置。如果你想执行测试,请执行mvn -Ptest测试。
由于dogbane已经回答你不能跳过任何其他方式。
@Pascal这只是一个例子在实际项目中,我看到当我在一个文件中做一个单独的更改,然后我想重新安装(阅读“重新部署到glassfish”)整个项目时,我不希望所有的JAR/WAR文件重新编译,只是受影响的人..不幸的是,maven重新构建所有模块..非常无效,你不同意吗? – yegor256 2010-11-02 12:16:09
@Vincenzo:你的用例究竟是什么? – 2010-11-02 14:37:26
@Pascal多模块项目,具有广泛的测试和静态代码分析,我运行'mvn clean install',t如果我在一个模块中更改一个单独的java文件。然后我运行'mvn install'并期望maven只测试/分析这个已更改的特定模块。不幸的是,它重新测试并重新分析所有模块。这需要很多时间.. – yegor256 2010-11-02 15:04:11