Mvn 安装或 Mvn 包

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

199695 次浏览

mvn install是最常用的选项。
很少使用 mvn package,只有在调试 maven 构建过程的某些问题时才会使用。

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

请注意,mvn package只会创建一个 jar 文件。
如果其他代码依赖于这些 jar,那么 mvn install将执行 还有在适当的位置安装 jar (和 class 等)文件。

我通常执行 mvn clean install; 这会删除 target目录并在该位置重新创建所有 jar。
清洁有助于处理不需要的或被移除的物品,这些物品有时会成为障碍。
而不是调试(有时候)只是重新开始所有的时间。

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

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

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

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

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

就像我说的,这取决于你想做什么。

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

生命周期参考开始,安装将运行项目的集成测试,而 包裹不会。

如果您确实需要不安装生成的构件,至少使用 核实

如果您使用的是 遥控器仓库(比如 artiFactory) ,那么使用普通的旧版本: mvn clean install

相当老的话题,但是 AFAIK,如果您运行您自己的存储库(例如: 使用 artiFactory)在您的团队之间共享 jar,您可能希望使用

mvn clean deploy

取而代之。

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

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

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

此外,如果你使用特拉维斯,你可以“缓存”你的依赖,因为它不会触及你的 $HOME.m2/repository,如果你使用自己的项目包。

在实践中,如果你甚至尝试做一个 mvn site你通常需要做一个 mvn install之前。无论是 site还是无数维护不善的插件都有太多的 bug。