Maven:将“测试”阶段目录从本地.m2更改为目标?

时间:2013-01-21 17:49:26

标签: maven target

请原谅我,如果这是补救措施,但我仍然是Maven的新手并且它的功能。

在我的项目中,当它“构建”并进入编译阶段时,它将创建一个目标目录,其中只包含已编译的库并更新(或创建,如果不存在)本地.m2目录。

当我进入“测试”阶段时,我希望它针对目标目录的库文件而不是本地.m2目录进行构建。

任何提示,建议或建议都将不胜感激。谢谢!

2 个答案:

答案 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阶段之前,因此将使用目录而不是.jarintegation-test阶段之后发生,因此将始终使用.jar

多模块项目中的事情变得更复杂(这是我的长篇介绍可以帮助你的地方)

Maven必须构建测试类路径。如果其中一个依赖项位于反应堆内,Maven将使用连接到反应堆的工件。否则它将使用本地缓存(如果需要,从远程存储库填充)。

运行时

mvn test

在根目录的multimdule项目中,没有替换默认(基于目录)的工件,因此模块内类路径将位于target/classes目录。

运行时

mvn package 

但是,在同一个项目中,由于每个模块按顺序完成其生命周期,因此所有相关模块都将交换其.jar文件作为其附加工件。

所有这些都应该向你展示Maven正在做出明智的事情。希望这有所帮助。

答案 1 :(得分:3)

test阶段将对您的项目执行测试。该项目不会通过依赖机制引用自己。只有依赖项将通过您的本地存储库引用,即.m2/repository

此外,将工件安装到本地存储库的不是compile阶段,而是install阶段。然后,如果您将远程存储库配置为部署目标,那么将有一个名为deploy的后续阶段将工件部署到远程存储库。注意,安装和部署几乎是相同的阶段,除了安装是本地唯一的事情;因此,这是开发环境工作时常见的构建阶段。通常,构建服务器将执行部署工作。