Mvn 安装或 Mvn 包
Posted
技术标签:
【中文标题】Mvn 安装或 Mvn 包【英文标题】:Mvn install or Mvn package 【发布时间】:2013-03-09 23:32:06 【问题描述】:我是 Maven 新手,我有一个基于 Java 的 Web 项目,在我的 MyEclipse 中配置了 maven。
现在如果我修改了任何 java 文件,我需要做Run as -> Mvn install
或Mvn package
吗?
【问题讨论】:
【参考方案1】:来自http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
package
: 获取编译后的代码并打包到它的分发包中 格式,例如 JAR。
install
:将包安装到本地仓库,用作 本地其他项目的依赖
因此,您的问题的答案是,这取决于您是否希望将其安装到本地存储库中。安装也将运行包,因为它在目标阶段堆栈中更高。
【讨论】:
我有一个项目,我将主文件夹代码和测试文件夹代码转换为 Jar。然后,我想将它部署到 nexus 中,以便其他项目可以使用它。我的部署命令是“mvn clean deploy -DskipTests”。我可以制作这个命令包,而不是安装到本地 repo 吗? @MasterJoe2 “然后,我想将它部署到 nexus” 这就是deploy
所做的。如果您将其替换为package
,它将不会部署到 Nexus。【参考方案2】:
mvn install
是最常用的选项。mvn package
很少使用,只有在调试 maven 构建过程的某些问题时才使用。
见:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
请注意,mvn package
只会创建一个 jar 文件。mvn install
会这样做并在其他代码依赖时将 jar(和类等)文件安装在适当的位置在那些罐子上。
我通常做一个mvn clean install
;这将删除 target
目录并在该位置重新创建所有 jar。
清洁有助于处理有时会妨碍您的不需要或移除的东西。
而不是调试(有时)只是一直重新开始。
【讨论】:
我不同意包很少用于 2 点。 1)每次运行安装时都会运行它。 2)如果您正在制作 .war,那么只需运行包就可以了,因为您不需要在本地仓库中进行战争。 答案没有解释,为什么更喜欢安装到本地仓库。据我了解,如果项目设置正确,那么反应器将提供模块之间的依赖关系。如果项目设置不正确,那么安装可能会隐藏这一事实并使用错误的工件。如果您有依赖项目,由于某种原因必须单独构建,那么您才需要安装。【参考方案3】:从Lifecycle reference,install 将运行项目的集成测试,package 不会。
如果您确实不需要安装生成的工件,请至少使用 verify。
【讨论】:
链接的文档说“如果你不确定你想要什么,首选的调用阶段是mvn verify
”。所以这是对原始问题的一个非常明确的答案。【参考方案4】:
另外你应该注意,如果你的项目是由几个相互依赖的模块组成的,你应该使用“install”而不是“package”,否则你的构建会失败,因为当你使用 install 命令时,模块 A将被打包并部署到本地仓库,然后如果模块B需要模块A作为依赖,它可以从本地仓库访问它。
【讨论】:
【参考方案5】:如果您不使用 remote 存储库(如 artifactory),请使用普通旧的:
mvn clean install
相当老的话题,但 AFAIK,如果您运行自己的存储库(例如:使用 artifactory)在团队之间共享 jar,您可能想要使用
mvn clean deploy
相反。
这样,您的持续集成服务器可以确保所有依赖项都正确推送到您的远程存储库中。如果您错过了一个,mvn 将无法在您的 CI 本地 m2 存储库中找到它。
【讨论】:
我想你说的是 mvn clean deploy,而不是 mvn clean package【参考方案6】:package - 获取已编译的代码并将其打包成可分发的格式,例如 JAR 或 WAR 文件。 install - 将包安装到本地存储库中,作为本地其他项目的依赖项使用
【讨论】:
【参考方案7】:正确的方式是mvn package
,如果您对构建的核心部分进行了正确处理,则无需在本地存储库中安装您的包。
此外,如果您使用 Travis,您可以“缓存”您的依赖项,因为如果您将包用于自己的项目,它不会触及您的 $HOME.m2/repository
。
实际上,如果您甚至尝试执行mvn site
,您通常需要先执行mvn install
。 site
的错误太多了,或者它有许多维护不善的插件。
【讨论】:
【参考方案8】:这取决于您在更改 Java 文件后想要实现的目标。在您想测试 maven 进程之前,您永远不需要做任何事情。 Eclipse/MyEclipse 将构建必要的内容并将输出放在项目中的适当位置。您还可以运行或部署它(例如,如果它是一个 Web 项目),而无需使用 maven 显式执行任何操作。最后,要在 maven 存储库中安装您的项目,您需要进行 maven 安装。您可能还希望执行其他 maven 目标,而 MyEclipse 不会自动执行这些目标。
正如我所说,这取决于你想做什么。
【讨论】:
以上是关于Mvn 安装或 Mvn 包的主要内容,如果未能解决你的问题,请参考以下文章