Mvn安装或Mvn包

问题描述 投票:115回答:8

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

java maven myeclipse
8个回答
147
投票

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

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

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

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


30
投票

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。 清洁有助于消除不必要或被移除的东西,有时可能会妨碍。 而不是调试(有些时候)只是一直开始新鲜。


8
投票

Lifecycle reference开始,install将运行项目的集成测试,package不会。

如果您确实不需要安装生成的工件,请至少使用verify。


5
投票

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


4
投票

如果您没有使用远程存储库(如artifactory),请使用plain old:mvn clean install

相当古老的主题,但AFAIK,如果您运行自己的存储库(例如:带有神器)在您的团队之间共享jar,您可能想要使用

mvn clean deploy

代替。

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


2
投票

package - 获取已编译的代码并将其打包为可分发的格式,例如JAR或WAR文件。 install - 将软件包安装到本地存储库中,以便在本地用作其他项目的依赖项


1
投票

正确的方法是mvn package,如果你为构建的核心部分做了正确的事情,那么就不需要在本地存储库中安装你的软件包了。

此外,如果您使用Travis,您可以“缓存”您的依赖项,因为如果您使用自己的项目包,它将不会触及您的$HOME.m2/repository

实际上,如果你甚至试图做一个mvn site,你通常需要做一个mvn install之前。有site或它的许多维护不良的插件有太多的错误。


0
投票

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

正如我所说,这取决于你想做什么。

© www.soinside.com 2019 - 2024. All rights reserved.