gpt4 book ai didi

java - 当 JAR 已经存在时,为什么 Maven 再次运行测试?

转载 作者:搜寻专家 更新时间:2023-11-01 01:19:23 24 4
gpt4 key购买 nike

安装我的maven项目:

mvn clean install

一切正常,在 /target 目录中创建了 JAR 文件。现在我再次运行它:

mvn install

Maven 再次执行单元测试和静态代码分析。我没有对 .java 文件做任何更改,JAR 就在那里,那么为什么要再次运行测试呢?是我做错了什么还是 maven 是这样设计的?

最佳答案

Now I run it again (...) Maven executes unit tests and static code analysis again

因为这就是您要求 Maven 做的事情。

当您调用 build phase , Maven 不仅会执行那个构建阶段,还会执行被调用的构建阶段之前的每个构建阶段。因此,调用:

mvn install

将运行安装之前的每个构建阶段(validatecompiletestpackage 等),然后再执行 install 以及您绑定(bind)到这些阶段的插件。

虽然 Maven 确实支持 Java 源代码的增量编译,但其他插件并不那么智能,并且会再次被触发。

现在,一些评论/建议:

  • 如果您什么都不做,运行install 有什么意义?
  • 如果您不想在每次构建时都运行静态代码分析,请使用特殊的配置文件。

A multi-module project, with extensive testing and static code analysis. I run mvn clean install, then I change one single java file in one module. Then I run mvn install and expect maven to test/analyze only this particular module, which was changed. Unfortunately, it re-tests and re-analyzes all modules.

事实上,如果您将 mvn install 作为 reactor 构建的一部分运行,将在所有模块上运行 mvn install,并且测试和分析将在所有模块上再次进行。这可能不是你所期望的,但这就是你会得到的(AFAIK,静态分析插件不知道变化 - 我无法解释为什么事情没有更好)。

It takes so much time.

我建议使用 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

关于java - 当 JAR 已经存在时,为什么 Maven 再次运行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4076713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com