如何在多模块maven构建中修复属性解析?

时间:2018-01-24 08:03:47

标签: java git maven

我将多存储库和多项目构建转换为单个存储库多模块构建。

每个项目都有自己的git repo,因此在签出时所有项目都处于同一级别。

ProjectA
ProjectB
ProjectC

请务必注意每个项目的版本不同。 ProjectC取决于ProjectB上的ProjectBProjectA

我在与其他项目处于同一级别的文件夹中创建了一个超级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合并到一个构建中?

1 个答案:

答案 0 :(得分:0)

  

我将多存储库和多项目构建转换为   单一存储库多模块构建。

[...]

  

请务必注意,每个项目的版本都不同。

如果您希望为不同的项目提供不同的版本,我强烈建议将它们保存在不同的存储库中,否则您将最终遇到各种工具问题。