145

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

4

8 回答 8

171

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

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

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

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

于 2013-03-20T17:56:36.237 回答
43

mvn install是最常用的选项。
mvn package很少使用,仅当您正在调试 maven 构建过程的某些问题时。

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

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

我通常做一个mvn clean install;这将删除target目录并在该位置重新创建所有 jar。
清洁有助于处理不需要或移除的东西,这些东西有时会妨碍您。
而不是调试(有时)只是从头开始。

于 2013-03-20T17:51:05.220 回答
13

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

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

于 2015-04-22T17:06:38.887 回答
6

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

于 2016-07-29T20:48:55.760 回答
4

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

很老的话题,但 AFAIK,如果您运行自己的存储库(例如:使用 artifactory)在团队之间共享 jar,您可能想要使用

mvn clean deploy

反而。

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

于 2015-12-03T15:46:02.303 回答
2

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

于 2015-02-24T06:13:24.740 回答
2

正确的方法是mvn package,如果您为构建的核心部分正确执行了操作,则无需在本地存储库中安装软件包。

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

实际上,如果您甚至尝试执行 a mvn site,您通常需要先执行 a mvn install。要么有太多的错误,要么site有许多维护不善的插件。

于 2017-05-13T23:25:02.107 回答
0

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

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

于 2013-03-21T06:04:59.080 回答