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