mvn install in maven 到底做了啥
Posted
技术标签:
【中文标题】mvn install in maven 到底做了啥【英文标题】:What does mvn install in maven exactly domvn install in maven 到底做了什么 【发布时间】:2012-05-19 00:22:11 【问题描述】:我刚开始使用 Maven,有人告诉我在特定目录中执行 mvn install
。
mvn install
到底是做什么的?
我认为它会在当前文件夹中查找 pom.xml
并开始按照该文件中指定的说明进行操作。对吗?
【问题讨论】:
maven.apache.org/guides/getting-started/… 【参考方案1】:重要的是要指出install
和install:install
是不同的东西,install
是一个阶段,在这个阶段,maven 所做的不仅仅是将当前项目模块工件安装到本地存储库,它首先检查远程存储库。另一方面,install:install
是一个目标,它只是构建您当前的项目并将其所有工件安装到本地存储库(例如,安装到 .m2
目录中)。
【讨论】:
【参考方案2】:在 maven 构建生命周期的任何阶段,都会执行之前的所有目标。
例如:mvn install 会调用 mvn validate、mvn compile、mvn test、mvn package 等。
【讨论】:
【参考方案3】:mvn install主要工作是1)下载依赖项和2)构建项目
而 job 1 现在由 intellij 之类的 ID 负责(他们在 POM 下载任何依赖项)
mvn install 现在主要用于job 2。
【讨论】:
【参考方案4】:您可能知道,Maven 是 Apache 提供的一个构建自动化工具,它不仅仅做依赖管理。我们可以使它成为 Ant 和 Makefile 的对等体,它会下载所需的所有依赖项。
在mvn install
上,它根据超级pom.xml
(根POM)下的所有子项目上的项目配置pom.xml
构建依赖关系树,并在名为的目录中下载/编译所有需要的组件.m2
在用户的文件夹下。必须解决这些依赖项才能构建项目而不会出现任何错误,mvn install
是一种可以下载大部分依赖项的实用程序。
此外,Maven 中还有其他实用程序,例如 dependency:resolve
,可以在任何特定情况下单独使用。 mvn的构建生命周期如下:LifeCycle Bindings
process-resources
compile
process-test-resources
test-compile
test
package
install
deploy
这个 mvn 的测试阶段可以通过使用标志 -DskipTests=true
来忽略。
【讨论】:
附带说明,如果您想跳过所有与测试相关的目标,请使用:-Dmaven.test.skip=true(而不是 -DskipTests=true) 这个答案未能阐明安装命令最终在本地安装工件,即在本地存储库中。【参考方案5】:简答
mvn 安装
将 pom 中指定的所有工件(依赖项)添加到 本地 存储库(来自远程源)。
【讨论】:
你忘了说它也构建了项目。【参考方案6】:install:install
目标由 «Apache Maven Install Plugin» 提供:
Apache Maven 安装插件
安装插件用于在安装阶段将工件添加到本地存储库。安装插件使用 POM 中的信息(
groupId
、artifactId
、version
)来确定工件在本地存储库中的正确位置。本地存储库是存储构建所需的所有工件的本地缓存。默认情况下,它位于用户的主目录 (
~/.m2/repository
),但可以使用<localRepository>
元素在~/.m2/settings.xml
中配置位置。——Apache Maven Install Plugin - Introduction.
话虽如此,确切的目标目的:
install:install
用于自动安装项目的主要工件(JAR、WAR 或 EAR)、其 POM 以及特定项目生成的任何附加工件(源代码、javadoc 等)。——Apache Maven Install Plugin - Introduction.
有关目标的更多详细信息,请参阅Apache Maven Install Plugin - install:install 页面。
有关构建生命周期的更多详细信息以及目标在构建生命周期中的位置,请参阅Maven – Introduction to the Build Lifecycle 页面。
【讨论】:
【参考方案7】:-DskipTests=true
是-Dmaven.test.skip=true
的简写形式
在 .m2 文件夹中的 Setting.xml 中进行更改。您可以使用本地 repo 的链接,这样一旦下载的 jars 就不会一次又一次地下载。
<url>file://C:/Users/admin/.m2/repository</url>
</repository>
【讨论】:
【参考方案8】:它将运行与默认生命周期的任何阶段相关联的所有已配置插件的所有目标,直到“安装”阶段:
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference
【讨论】:
【参考方案9】:您是否查看过任何 Maven 文档,例如 maven install plugin docs?
Nutshell 版本:它将构建项目并将其安装在您的本地存储库中。
【讨论】:
假设您在开源库上运行“mvn install”。然后,您在使用我们首先编译的开源库的项目上运行“mvn install”。运行“mvn install”时,会先在本地 repo 中查找 JAR 吗?还是依赖POM文件? @Kevin 它应该首先进入本地,因为这就是重点。如果它不在本地存储库中,它将查看您已配置的任何存储库(或默认值),如果找到,则将其安装到您的本地存储库中。我怀疑您可以将其配置为始终跳过本地存储库,尽管我不知道如何不查找它。 你看过 Maven 的规范文档了吗? Apache 的网站解释了 mvn install 的目的:“在大多数情况下, install:install 目标不需要任何配置,它需要在默认构建生命周期的安装阶段安装项目的 POM 和工件文件。”这是因为 Apache 的文档未能解释“mvn install”实际上做了什么,所以喜欢海报的人和我自己都在寻找答案。完全合理的问题。以上是关于mvn install in maven 到底做了啥的主要内容,如果未能解决你的问题,请参考以下文章
maven添加本地包命令mvn install:install-file
Maven - 为什么mvn install会启动编译或测试阶段?
mvn install local jar 出错:无法执行目标 org.apache.maven.plugins:maven-install-plugin...(是一个目录)-> [帮助 1]