我是 Maven 新手,我有一个基于 Java 的 Web 项目,在我的 MyEclipse 中配置了 maven。
现在,如果我修改了任何 java 文件,那么我需要做吗Run as -> Mvn install
?Mvn package
8 回答
来自http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
package
:获取已编译的代码并将其打包成可分发的格式,例如 JAR。
install
:将包安装到本地存储库中,作为本地其他项目的依赖项
因此,您的问题的答案是,这取决于您是否希望将其安装到本地存储库中。安装也将运行包,因为它在目标阶段堆栈中更高。
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。
清洁有助于处理不需要或移除的东西,这些东西有时会妨碍您。
而不是调试(有时)只是从头开始。
从Lifecycle reference中,install将运行项目的集成测试,而package不会。
如果您确实不需要安装生成的工件,请至少使用verify。
另外你应该注意,如果你的项目是由几个相互依赖的模块组成的,你应该使用“install”而不是“package”,否则你的构建会失败,因为当你使用 install 命令时,模块 A 将被打包并部署到本地存储库,然后如果模块 B 需要模块 A 作为依赖项,它可以从本地存储库访问它。
如果您不使用远程存储库(如工件),请使用普通旧的:
mvn clean install
很老的话题,但 AFAIK,如果您运行自己的存储库(例如:使用 artifactory)在团队之间共享 jar,您可能想要使用
mvn clean deploy
反而。
这样,您的持续集成服务器可以确保所有依赖项都正确推送到您的远程存储库中。如果您错过了一个,mvn 将无法在您的 CI 本地 m2 存储库中找到它。
package - 获取编译后的代码并将其打包成可分发的格式,例如 JAR 或 WAR 文件。install - 将包安装到本地存储库中,作为本地其他项目的依赖项
正确的方法是mvn package
,如果您为构建的核心部分正确执行了操作,则无需在本地存储库中安装软件包。
此外,如果您使用 Travis,您可以“缓存”您的依赖项,因为$HOME.m2/repository
如果您将包用于自己的项目,它不会触及您的依赖项。
实际上,如果您甚至尝试执行 a mvn site
,您通常需要先执行 a mvn install
。要么有太多的错误,要么site
有许多维护不善的插件。
这取决于您在更改 Java 文件后要实现的目标。在您想测试 maven 进程之前,您永远不需要做任何事情。Eclipse/MyEclipse 将构建必要的内容并将输出放在项目中的适当位置。您还可以运行或部署它(例如,如果它是一个 Web 项目),而无需使用 maven 显式执行任何操作。最后,要在 maven 存储库中安装您的项目,您需要进行 maven 安装。您可能还希望执行其他 maven 目标,而 MyEclipse 不会自动执行这些目标。
正如我所说,这取决于你想做什么。