我有一个存储在Git中的Maven 3多模块项目(~50个模块)。多个开发人员正在研究这个代码并构建它,我们还有自动构建机器,可以在每次推送时运行冷构建。
大多数单独的更改日志会在相当少的模块中更改代码,因此每次更改都需要浪费时间来重建整个源代码树。但是,我仍然希望运行父项目构建的最终结果与构建整个代码库的结果相同。而且我不想开始手动版本化模块,因为这将成为纵横交错的版本更新的噩梦。
我想要做的是添加一个插件,它拦截构建或安装中的一些步骤,并获取模块内容的散列(理想情况下从Git中提取),然后在共享二进制存储库中查找存储在其下的工件哈希值。如果找到一个,它将使用该工件,甚至不执行完整构建。如果它在缓存中找不到任何内容,则它会正常执行构建,然后将其工件存储在缓存中。重建任何具有依赖关系(直接或瞬态)的模块也是一件好事,这些模块本身都有缓存缺失。
那里有什么东西可以做这样的事吗?如果没有,将最简单的方法添加到Maven会是什么?看起来插件可能能够实现它,但是对于一些部件我找不到合适的方式来连接到Maven。具体做法是:
我也采用完全不同的方式来实现相同的最终结果(更少的冗余构建),尽管解决方案越激烈,它在短期内对我的价值就越小。
答案 0 :(得分:1)
我之前已经实现了一个更复杂的解决方案,其中包含工件版本操作和部署到私有Maven存储库。但是,我认为这将更好地满足您的需求,并且更简单:
-pl
参数为每个模块构建一个构建)。 mvn install
目标确保将新构建的工件添加到本地存储库这应该适用于功能分支构建,这要归功于Bamboo处理分支构建的父子关系的方式。
请注意,这意味着Maven将重新下载所有其他依赖项,因此您应该在本地网络上使用代理私有Maven存储库,例如Artifactory或Nexus。
如果您愿意,我还可以描述我已经实现的更复杂的方案,包括修改工件版本和部署到私有Maven存储库。
答案 1 :(得分:0)
Jenkins插件允许您管理/最小化依赖构建
如果您执行'mvn deploy'将构建保存到公司Maven仓库中,那么当构建在从属Jenkins机器上运行时,您不必担心依赖性。结果是除非它或其中一个依赖项发生了变化,否则不会构建任何模块。
希望您可以将这些原则应用于Bamboo的解决方案。