首页 > 解决方案 > 强制 maven 始终从目标文件夹中获取工件

问题描述

情况

拆分长时间运行的构建作业会很好,尤其是在多模块项目中。

  1. 编译所有内容mvn clean installmvn clean package
  2. 对每个模块执行单元测试mvn surefire:test
  3. 执行集成测试ant and stuff
  4. 将工件发布到远程存储库mvn my.own.tools:publish-plugin:publish
  5. 执行后期构建步骤(标记等)build server stuff

在某些构建环境中,例如 Atlassian Bamboo,每个步骤都可能在另一个构建代理上执行,就像前一个步骤一样。他们甚至可以各自拥有自己的本地存储库。但是,可以将工作目录的所有文件复制到后续阶段的文件。

观察

Maven 在target查找本地存储库或远程存储库之前会使用文件夹的内容。当目标目录的内容是phase在特定运行期间由先前创建的时,这是正确的。

例子:mvn clean install surefire:test

如果测试有依赖关系,maven 将首先查看在compile phase.

如果命令一分为二,maven 似乎根本无法识别target文件夹。

例子:mvn clean install; mvn surefire:test

现在 maven 从本地存储库加载所有依赖项,或者,如果它们不存在,则从远程存储库加载。

问题)

问题

在任何情况下,如何强制 maven 从多模块项目的现有目标文件夹中加载依赖项?我知道 Maven 不知道步骤 2 中的这些文件夹,因为它们不是在 Maven 运行期间创建的。但是我怎样才能强制 maven 查看这些文件夹是否存在?

更详细的问题;-)

我们在第 4 步中的“发布插件”似乎工作正常,并将工件上传到目标文件夹之外。项目信息通过通常的 Maven 属性收集在 Mojo 中。但是有一些 zip 文件在步骤 1 中由org.apache.maven.plugins:maven-assembly-plugin. 找不到这些 zip 文件,尽管它们位于目标文件夹中。现在 maven 尝试下载它们,这很有趣,因为它这样做是为了让它们在手上进行上传。

标签: maven

解决方案


推荐阅读