“mvn clean install”与“mvn install”有何不同?

Posted

技术标签:

【中文标题】“mvn clean install”与“mvn install”有何不同?【英文标题】:How is "mvn clean install" different from "mvn install"? 【发布时间】:2011-08-26 11:56:23 【问题描述】:

mvn clean installmvn install 有什么区别?

【问题讨论】:

【参考方案1】:

clean 是 Maven 中它自己的构建生命周期阶段(可以被认为是一个动作或任务)。 mvn clean install 告诉 Maven 在为每个模块运行 install 阶段之前在每个模块中执行 clean 阶段。

这样做会清除您拥有的所有已编译文件,确保您确实是从头开始编译每个模块。

【讨论】:

我一直认为安装包括清洁作为其阶段之一......直到我看到这个 @shanyangqu 很遗憾,没有。 clean 在 separate lifecycle 中,所以默认不调用。 1.关于“可以被认为是一个动作或任务”:Maven阶段不是actionstasks。如果没有插件目标绑定到某个阶段,则既不是动作也不是任务,即 nothing 不会完成。一个阶段多a step or stage。 2.关于“执行clean阶段”:使用mvn clean,它通过clean生命周期的pre-cleanclean阶段并执行绑定到每个阶段的插件目标。 3.关于“清除所有编译文件”:不仅是那些,还有$project.build.directory下的所有内容:<artifact>.jar、资源、文件夹等。 @JunchenLiu 实际上有四个项目名为cleanclean 生命周期及其clean 阶段,clean prefix 用于maven-clean-plugin 及其clean 目标。另请参阅this answer to Maven: Lifecycle vs. Phase vs. Plugin vs. Goal 的评论。【参考方案2】:

Maven 允许您在命令行(或两者)指定目标或生命周期阶段。

cleaninstall 是 two different phases of two different lifecycles,different plugin goals are bound(默认情况下或 explicitly in your pom.xml)

clean 阶段,按照惯例,旨在使构建可重现,即它清理以前构建创建的任何内容。在大多数情况下,它通过调用clean:clean 来执行此操作,这会删除绑定到$project.build.directory 的目录(通常称为“目标”)

【讨论】:

“安装”不是一个生命周期。这是默认生命周期中的一个阶段。虽然有“干净”生命周期,但AFAIK此参数指定“干净”生命周期中的“干净”阶段,而不是“干净”生命周期本身。 @Puce 是的,我的意思是“阶段”,而不是生命周期 实际上有4个项目名为clean:生命周期及其阶段之一; Maven Clean Plugin 的plugin prefix 及其目标之一。 @GeroldBroser 什么 cmets? :-) @SeanPatrickFloyd :D Klan 的 Scherzerl,哈? ;-) 好的,巨蟒……+1【参考方案3】:

您可以使用 maven 调用多个 target 目标。 mvn clean install 先调用clean,然后再调用install。您必须手动清理,因为清理不是标准的 target 目标,并且不会在每次安装时自动执行。

clean 删除目标文件夹 - 它删除所有类文件、java 文档、jar、报告等。如果你不clean,那么 maven 只会“做必须做的事情”,就像在相应的源文件没有更改时(简而言之)它不会编译类。

我们在ant中称之为target,在maven中称之为goal

【讨论】:

我认为在这种情况下,清理和安装是生命周期阶段,而不是目标。 我完全同意@JL_SO clean 不会删除 target 文件夹。它清理它。它也不一定是名为target 的文件夹,而是$project.build.directory 定义的文件夹。【参考方案4】:

坚持使用 Maven 术语:

“clean”是clean的一个阶段 生命周期 “安装”是一个阶段 默认生命周期

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

【讨论】:

实际上有四个项目名为cleanclean 生命周期及其clean 阶段,clean prefix 用于maven-clean-plugin 及其clean 目标。另请参阅this answer to Maven: Lifecycle vs. Phase vs. Plugin vs. Goal 的评论。 是的,但mvn clean install 中的干净指的是阶段。 是的,确实如此。我的评论并不意味着批评,而是为所有未来的读者和寻求者提供额外的信息。【参考方案5】:

@Andreas_D 同上,此外,如果您说在项目中将 Spring 从 1 个版本更新到另一个版本而不进行清理,那么您最终会在您的工件中同时使用这两个版本。使用 Maven 进行 Flex 开发时经常遇到这种情况。

【讨论】:

以上是关于“mvn clean install”与“mvn install”有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

如何在eclipse中使用mvn clean install

Run “mvn clean install” in Eclipse

mvn clean install对idea中项目结构的影响

当尝试 mvn clean install -> 出现错误包不存在

pom.xml配置,针对mvn clean install -P参数(环境参数)打包

mvn clean install vs. deploy vs. release