【问题标题】:Maven Modules with Variable as Version number以变​​量为版本号的 Maven 模块
【发布时间】:2019-05-09 09:56:20
【问题描述】:

我有一个 Maven 项目,结构如下:

模块 A(父模块)、子模块 B 和子模块 C

在父 pom.xml 中,我使用一个变量来设置所有项目的版本:

...
    <version>${revision}</version>
...
    <properties>
        <revision>1.1</revision>
    </properties>
...
    <modules>
        <module>moduleB</module>
        <module>moduleC</module>
    </modules>
</project>

Module C 是我的分发包,它使用 shade 插件将所有内容打包到一个 jar 中。

在子模块中我这样设置父级:

<parent>
    <groupId>group</groupId>
    <artifactId>moduleA</artifactId>
    <version>${revision}</version>
</parent>

现在我想在另一个项目中使用模块 C,但是这样做时我只收到以下错误:

未能在项目 newProject 上执行目标:无法解析项目组的依赖项:newProject:jar:0.0.1-SNAPSHOT:无法在组:moduleC:jar:1.1 收集依赖项:无法读取组的工件描述符: moduleC:jar:1.1: 在 nexus (NEXUS_URL) 中找不到工件组:parent:pom:${revision}

我认为问题是,在将模块 C 引用为依赖项时未填写变量值。我该如何解决这个问题?我已经尝试在构建和强制更新所有工件之前清理项目但没有成功。

【问题讨论】:

  • 您是否尝试过硬编码修订版?
  • 我想避免这种情况,以便在一个地方轻松管理多模块项目的版本。事实上,该项目的子模块不仅仅是这两个。
  • 我只想知道它是否有效
  • 我认为这个链接可以帮助你:jeanchristophegay.com/…
  • 我建议阅读以下内容:maven.apache.org/maven-ci-friendly.html(尤其是关于安装/部署的部分)...

标签: java maven


【解决方案1】:

Maven 期望所有模块都有一个硬版本。

为避免编辑大量 pom,请使用版本插件,例如:

mvn versions:set -DnewVersion=1.0.1

如果您在父节点上运行上述命令,它将修复所有子节点。

有关文档,请参阅 here

【讨论】:

【解决方案2】:

感谢 hadu.mansouri 的评论,我可以修复它。我使用 flatten-maven-plugin 来扁平化 pom.xml 文件。但是,shade 插件似乎有问题,因为 shaded 模块是唯一不起作用的模块。因此,在发布的 shade 模块 pom 中它说:

<version>${revision}</version>

用于引用父级。我使用了评论中链接的文章的方法。在那里,使用了这个扩展:https://github.com/jcgay/unique-revision-maven-filtering

使用它而不是flatten-maven-plugin,Maven使用单一版本属性正确构建多模块项目,我也可以在其他项目中正确使用阴影模块。

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    相关资源
    最近更新 更多