2013-03-20 107 views
89

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

+0

请发表您的'pom.xml'。很难说不知道你的项目配置是什么! – Ankit 2013-03-20 17:43:18

+8

95%的时间使用'mvn install','mvn package'很少。 – Johan 2013-03-20 17:45:34

+6

mvn install shoudl只把你的jar放到本地仓库 - 我没有看到有什么真正的理由为什么要用web(war)项目来做到这一点? – Hurda 2013-03-20 20:43:56

回答

19

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目录并重新创建该位置的所有罐子。
干净有助于不需要或删除的东西,有时可能会阻碍。
而不是调试(有些时候)只是开始新鲜的时间。

+15

我不同意这个软件包很少用于2点。 1)每次运行安装时都会运行。 2)如果你正在制作一个.war,那么只需运行包就可以了,因为你不需要在本地回购中进行战争。 – 2014-01-15 16:04:28

+2

答案没有解释,你为什么更愿意安装到本地存储库。根据我的理解,如果项目设置正确,那么反应堆将提供模块之间的依赖关系。如果项目设置不正确,则安装可能会隐藏这一事实并使用错误的工件。如果您有相关的项目,必须由于某种原因单独构建,那么您只需要安装。 – 2015-08-17 13:41:16

0

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

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

2

包 - 使编译的代码,并在其分发格式打包,诸如JAR或WAR文件。 安装 - 软件包安装到本地仓库,用作其他项目的依赖本地

5

Lifecycle reference安装将运行项目的集成测试,不会。

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

3

如果你不使用一个远程库(如artifactory的),使用普通的老: mvn clean install

很老的话题,但据我所知,如果您有自己的仓库(如:带artifactory的)分享你的团队(S)之间的罐子,你可能想使用

mvn clean deploy

代替。

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

+1

我想你是在谈论mvn clean部署,而不是mvn clean package – Mayjak 2016-01-18 16:42:17

+0

的确,感谢@Estarriol,我更新了我的答案。 – user1853859 2016-01-20 20:53:13

3

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

1

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

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

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