maven - 强制 maven 始终从目标文件夹中获取工件
问题描述
情况
拆分长时间运行的构建作业会很好,尤其是在多模块项目中。
- 编译所有内容
mvn clean install
或mvn clean package
- 对每个模块执行单元测试
mvn surefire:test
- 执行集成测试
ant and stuff
- 将工件发布到远程存储库
mvn my.own.tools:publish-plugin:publish
- 执行后期构建步骤(标记等)
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 从本地存储库加载所有依赖项,或者,如果它们不存在,则从远程存储库加载。
问题)
- 在步骤 2 中,maven 会忽略在步骤 1 中创建的目标文件夹 a 中的内容。
- 第 2 步在与第 1 步不同的构建服务器上运行。但是,第 1 步的整个文件结构(包括目标文件夹)已从第 2 步复制到工作目录中。测试所依赖的工件没有被采用从这些目录中。由于每个构建服务器都有自己的本地存储库,因此无法找到它们,并且从未在远程存储库上上传它们。
- 不幸的是,任何让我们的整个野兽更加模块化和拆分项目的想法都是不可能的
问题
在任何情况下,如何强制 maven 从多模块项目的现有目标文件夹中加载依赖项?我知道 Maven 不知道步骤 2 中的这些文件夹,因为它们不是在 Maven 运行期间创建的。但是我怎样才能强制 maven 查看这些文件夹是否存在?
更详细的问题;-)
我们在第 4 步中的“发布插件”似乎工作正常,并将工件上传到目标文件夹之外。项目信息通过通常的 Maven 属性收集在 Mojo 中。但是有一些 zip 文件在步骤 1 中由org.apache.maven.plugins:maven-assembly-plugin
. 找不到这些 zip 文件,尽管它们位于目标文件夹中。现在 maven 尝试下载它们,这很有趣,因为它这样做是为了让它们在手上进行上传。
解决方案
推荐阅读
- java - 模拟 QueryBuilder 时出现 NullPointerException
- python - 使用 BeautifulSoup4 抓取 div 类信息
- node.js - Npm 测试仅在目录名称匹配时失败
- c - 获取 uint8_t 指针的值
- firebase - 根据查询条件限制对firestore的访问
- python - Python 从未绑定的 TypedDict 获取密钥
- c# - 富文本框中的链接不可点击
- c++ - 为什么在循环 boost::hana::tuple 时会得到意外的索引
- swift - 我想用故事板和 swift 重新创建这个设计
- r - 跨多行数据的时间间隔