我将多存储库和多项目构建转换为单个存储库多模块构建。
每个项目都有自己的git repo,因此在签出时所有项目都处于同一级别。
ProjectA
ProjectB
ProjectC
请务必注意每个项目的版本不同。 ProjectC
取决于ProjectB
上的ProjectB
和ProjectA
。
我在与其他项目处于同一级别的文件夹中创建了一个超级pom,并将其他项目作为模块添加到super-pom中,并在其他项目中引用了父pom,从而产生以下布局: / p>
ProjectX
ModuleA
ModuleB
ModuleC
子模块具有父引用,如下所示:
<parent>
<groupId>my.company</groupId>
<artifactId>artifact</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../ProjectX</relativePath>
</parent>
我有一个settings.xml
,其中有两个配置文件引用了每个模块的正确快照和发布版本:
<profile>
<id>all-snapshot</id>
<properties>
<a.version>1.5-SNAPSHOT</a.version>
<b.version>2.6-SNAPSHOT</b.version>
<c.version>3.7-SNAPSHOT</c.version>
</properties>
</profile>
<profile>
<id>all-release</id>
<properties>
<a.version>1.4.0</a.version>
<b.version>2.5.0</b.version>
<c.version>3.6.0</c.version>
</properties>
</profile>
如果我使用mvn clean install -s settings.xml -P all-snapshot -f ProjectX
发布项目构建,一切似乎都能正常工作,并且只在本地存储库中生成快照依赖项。如果我针对all-release
配置文件执行它似乎也可以正常工作,只将版本下载到本地maven存储库。
但如果我尝试构建单个模块mvn clean install -s settings.xml -P all-snapshot -f ProjectX -pl :modulec
,我会得到:
Could not resolve dependencies for project modulec:3.7-SNAPSHOT: The following artifacts could not be resolved: moduleb:jar:${b.version}, moduela:jar:${a.version}
看起来属性解析工作不正常,因为maven调用缺少某些东西,或者因为项目布局损害了maven。
有关如何解决此问题的任何想法?或者更好的方法将repos合并到一个构建中?
答案 0 :(得分:0)
我将多存储库和多项目构建转换为 单一存储库多模块构建。
[...]
请务必注意,每个项目的版本都不同。
如果您希望为不同的项目提供不同的版本,我强烈建议将它们保存在不同的存储库中,否则您将最终遇到各种工具问题。