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