【问题标题】:Update version of Maven modules in one place only仅在一处更新 Maven 模块的版本
【发布时间】:2017-01-18 18:10:43
【问题描述】:

我有一个包含 2 个模块的 Maven 项目。我希望模块继承该项目的版本,而不是将其定义为任何子模块的 POM 文件中的父级(其背后的原因是模块已经有父级)。实现这一目标的最佳方法是什么?

从属性文件导入版本不起作用,因为 maven 需要一个常量值作为项目版本,而不是表达式。 Maven 插件(例如版本 maven 插件或 maven 发布插件)不能解决我的问题,因为我需要可以在 IDE 中工作的东西(我必须使用 Eclipse 来打包项目,而不是我的电话)。

编辑

澄清事情(如果我的原始帖子不够清楚,请道歉)

主项目 POM 文件

...
<groupId>org.mygroup</groupId>
<artifactId>parentproject</artifactId>
<version>1.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
    <module>module1</module>
    <module>module2</module>
</modules>
...

模块 POM 文件示例

...
<groupId>org.mygroup</groupId>
<artifactId>module1</artifactId>
<version>1.1.0-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
 <!-- Some parent that's NOT the main project, e.g. Spring Boot -->
</parent>
...

我想要的是一个解决方案,它允许我只设置一次版本(例如在主项目 POM 文件中)并让该项目的每个模块“继承”该版本。

【问题讨论】:

  • 有点不清楚你在问什么。如果我做对了,你有 2 个模块,这意味着它们已经是具有父级的多模块 Maven 项目的一部分。现在您希望这两个模块从第二个父级继承吗?您可以发布一些配置的示例 POM 吗?
  • 你可以定义一个pom类型的新maven项目并对其有依赖
  • 在我的帖子中添加了示例 POM
  • 作为家长,您必须使用您的parentproject。你不能有 2 个父母,对于 Spring Boot,你不需要使用他们的父母 POM,见stackoverflow.com/questions/20731158/…
  • 是的,我知道我不能有两个父母,并且我已经阅读了对该问题的回复(Spring Boot 只是我在上面的示例中所述的一个示例,可能还有另一个项目是用作父项目,另外我想同时使用父项目提供的依赖项和插件管理,而无需在 POM 文件中“手动”添加它们)。我想实现版本“继承”,而不是从parentproject 实际继承。我意识到我所要求的可能实际上并不存在,但我认为值得一问,因为我对 Maven 不太熟悉。

标签: java eclipse maven multi-module


【解决方案1】:

我真的想不出任何 Maven 设施可以 100% 满足您的需求。如果您可以将父项目设置为每个子模块的实际父项目,则需要在 parent 声明中指定其版本,所以...

但是我想了一个技巧,通过一个 authomatism 来完成这项工作,这样每次更改父版本时,它都会自动传播到每个子模块。可以这样做:

在父项目中编写一个插件,在其每个模块的 pom 文件中写入版本 ID(例如,通过带有 xml-maven-plugin 的 XSL 转换)。

然后,将此插件链接到package 阶段,这样每次构建父模块时,版本都会传播到子模块。

您只需刷新 Eclipse 中的子模块项目,让 Eclipse 了解更改。

但如果不想手动刷新,还有另一种选择——完全基于Eclipse:

制作一个 Ant 脚本来执行 copy-version-to-all-module-poms 任务。并且,不是从 Maven 阶段调用它,而是编写一个 Eclipse builder 来调用它,并且在这个构建器中,还编写特定模块的 刷新。因此,每次您执行项目的 build 时,它都会将其版本复制到子模块中,并让 Eclipse 了解此更改。

【讨论】:

    【解决方案2】:

    您可能应该将父项目设置回您的实际父项目。模块之间的版本号可以使用mvn versions:set 同时更新。如果需要跨模块依赖的版本号,请使用${project.version}。如果您想为其依赖项嵌入另一个 Maven 配置文件,请考虑使用物料清单 (BOM):https://stackoverflow.com/a/14876651。希望事情能给你带来答案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2013-04-04
      • 2017-01-19
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      相关资源
      最近更新 更多