Mvn安装或Mvn软件包


134

我是Maven的新手,我有一个基于Java的Web项目,在MyEclipse中配置了maven。
现在,如果我修改了任何Java文件,那么我需要做Run as -> Mvn install还是做Mvn package

Answers:


158

来自http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

package:获取编译后的代码并将其打包为可分发格式,例如JAR。

install:将软件包安装到本地存储库中,以作为本地其他项目中的依赖项

因此,问题的答案是,这取决于您是否希望将其安装到本地存储库中。Install也将运行程序包,因为它在目标阶段堆栈中更高。


我有一个项目,我将主文件夹代码和测试文件夹代码转换为Jar。然后,我想将此部署到nexus中,以便其他项目可以使用它。我的部署命令是“ mvn clean deploy -DskipTests”。我可以制作此命令包,而不是安装到本地仓库吗?
MasterJoe2

@ MasterJoe2 “那么,我想这个部署到关系”那是什么deploy呢。如果您将其替换为package,则不会将其部署到Nexus。
沃伦

37

mvn install是最常用的选项。
mvn package仅在调试Maven构建过程中的某些问题时才很少使用。

参见:http : //maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

注意,mvn package这只会创建一个jar文件。如果其他代码依赖于这些jar,
mvn install将执行此操作并将 jar(和类等)文件安装在适当的位置。

我通常做一个mvn clean install; 这将删除target目录并在该位置重新创建所有jar。
清洁有助于处理不必要的或被移除的东西,这些东西有时可能会造成干扰。
而不是调试(有时)只是一直重新启动。


27
我不同意该软件包很少用于2分。1)它会在您每次运行安装时运行。2)如果您正在制作.war,则只需运行程序包就可以了,因为您的本地存储库中不需要War。
Joshua Wilson

5
答案没有解释,为什么您要安装到本地存储库。据我了解,如果项目设置正确,那么反应堆将提供模块之间的依赖关系。如果项目设置不正确,则安装可能会隐藏此事实并使用错误的工件。如果您有依赖项目,则由于某些原因必须单独构建这些项目,只有这样才能安装。
Vsevolod Golovanov 2015年


5

还应注意,如果您的项目由相互依赖的几个模块组成,则应使用“ install”而不是“ package”,否则构建将失败,因为当您使用install命令时,模块A将被打包并部署到本地存储库,然后如果模块B需要模块A作为依赖项,则它可以从本地存储库访问它。


4

如果您使用远程存储库(如工件),请使用普通的旧版本: mvn clean install

相当老的话题,但有AFAIK,如果您运行自己的存储库(例如:带有人工制品)以在团队之间共享jar,则可能要使用

mvn clean deploy

代替。

这样,您的持续集成服务器可以确保将所有依赖项正确地推送到远程存储库中。如果错过了一个,mvn将无法在您的CI本地m2存储库中找到它。


1
我认为您在谈论的是mvn clean部署,而不是mvn clean程序包
Mayjak 2016年


2

正确的方法是mvn package,如果您构建的核心部分正确地做事情那么应该没有必要安装你的包在本地仓库。

另外,如果您使用Travis,则可以“缓存”您的依赖项,因为$HOME.m2/repository如果您将包用于自己的项目,它不会影响您的依赖项。

实际上,如果您甚至尝试执行一个操作mvn site,通常都需要先执行一个操作mvn install。要么有太多的错误,要么site是许多维护不良的插件。


0

这取决于更改Java文件后要实现的目标。除非要测试Maven流程,否则您无需执行任何操作。Eclipse / MyEclipse将构建必要的内容,并将输出放置在项目中的适当位置。您也可以运行或部署它(例如,如果它是一个Web项目),而无需使用Maven显式执行任何操作。最后,要在maven存储库中安装项目,您将需要进行maven安装。您可能还希望执行其他Maven目标,而MyEclipse不会自动执行这些目标。

正如我所说,这取决于您要做什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.