如果这是补救措施,请原谅我,但我对 Maven 和它的功能仍然很陌生。
在我的项目中,当它“构建”并进入编译阶段时,它将创建一个仅包含已编译库的目标目录并更新(或创建如果不存在)本地 .m2 目录。
当我进入“测试”阶段时,我希望它针对目标目录的库文件构建,而不是本地 .m2 目录。
任何提示、建议或建议将不胜感激。谢谢!
Maven 有“反应器”这个概念,这只是对正在构建的项目列表的一个花哨的术语。在 Maven 构建的开始和结束时,Maven 会打印出这个项目列表(/project/name
如果定义或groupId:artifactId
以其他方式使用)。
对于反应器中的每个项目,Maven 维护一个已附加的工件列表。默认情况下,每个模块pom.xml
都是附加的,并且随着每个插件的运行,它们可以选择附加额外的工件。大多数插件不附加工件,以下是一些插件:
jar:jar
创建一个.jar
并附加它war:war
创建一个.war
并附加它source:jar
创建.jar
源 Java 代码并附加一个分类器source
java doc:jar
创建一个.jar
JavaDocs 广告并附加一个分类器javadoc
还有一个默认的主工件(这是被替换的那个jar:jar
),它实际上是一个目录而不是文件,因此它不会被安装或部署到本地存储库缓存或远程存储库。
因此,当在反应器中,附加主工件的插件尚未运行,而另一个插件请求主工件时,它将被赋予目录${project.build.outputDirectory}
。如果在附加主要工件之后,则将提供该主要工件。
test
阶段发生在阶段之前package
,因此将使用目录而不是.jar
. 该integation-test
阶段发生在之后,因此将始终使用.jar
.
在多模块项目中事情变得更加复杂(这是我的长篇介绍应该帮助你的地方)
Maven 必须构建测试类路径。如果依赖项之一在反应器内,Maven 将使用附加到反应器的工件。否则它将使用本地缓存(必要时从远程存储库填充)。
当你跑
mvn test
在来自根的多模块项目中,没有替换默认(基于目录的)工件,因此模块内类路径将指向target/classes
目录。
当你跑
mvn package
然而,在同一个项目中,因为每个模块都按顺序完成其生命周期,所以所有依赖模块都将交换它们的.jar
文件作为附加的工件。
所有这些都应该向您表明 Maven 正在做明智的事情。希望这有帮助。
该test
阶段将对您的项目执行测试。该项目不会通过依赖机制引用自身。只有依赖项将通过您的本地存储库引用,即.m2/repository
此外,compile
将工件安装到本地存储库的不是阶段,而是install
阶段。然后,有一个名为 的后期阶段,deploy
它将将工件部署到远程存储库,前提是您将远程存储库配置为部署目标。请注意,安装和部署几乎是相同的阶段,除了安装是本地唯一的事情;因此,在进行开发环境工作时,这是常见的构建阶段。通常构建服务器会做部署的东西。