如何将项目的发布版本存储在特定属性中?

问题描述

我们有一个构建场景,结果证明它对于 Maven 和 maven-release-plugin 来说太复杂了,我已经不知所措了。

我的团队处理一系列应用程序,这些应用程序都使用多模块 Java 库(称为“dev-stack”)并且所有应用程序(包括库)都具有相同的父级(称为“super-pom”)。

为了解决在整个作品集的不同版本中使用相同依赖项的问题,我将超级 pom 转换为 BOM,所有依赖项都表示在 <dependencyManagement> 部分中。这样做的好处是可以一劳永逸地定义每个依赖项(包括库的模块)的版本。还有其他好处,但它们与我要问的这个问题无关。

超级 pom 遵循其他 BOM 的传统,通过使用属性指定版本。例如,

<jackson-version>2.12.0</jackson-version>

因此图书馆有这样的属性

<dev-stack-version>${project.version}</dev-stack-version>

由于发布过程繁琐,我们决定将超级 pom 合并到库中,然后该库将成为所有应用程序的父级。

对库模块的依赖如下所示:

      <dependency>
        <groupId>com.delfingen</groupId>
        <artifactId>dev-stack-batch</artifactId>
        <version>${dev-stack-version}</version><!-- problematic version specification --> 
      </dependency>

如果依赖项中指定的版本既不是 ${project.version} 也不是直接版本值(例如 2.0.0),也不是解析为前两个之一的属性,则 maven-release-plugin 无法构建库可能性。错误信息是:

未能执行目标 org.apache.maven.plugins:maven-release-plugin:3.0.0-M1:prepare (default-cli) on project dev-stack: The artifact (com.delfingen:dev-stack- batch) 需要与在项目 (com.delfingen:dev-stack) 中为表达式 (dev-stack-version) 找到的版本 (${project.version}) 不同的版本 (2.0.0)

我不明白为什么 maven-release-plugin 不能插入表达式 (dev-stack-version) 并确定它实际上匹配所需的版本 (2.0.0)。

无论如何,我的问题是:

  • 如果我指定 ${project.version},库构建良好,maven-release-plugin 执行发布没有任何问题,但是,基于库的应用程序都不会构建,因为依赖版本 {{1 }} 在构建应用程序时进行评估,生成应用程序的版本,而不是库的版本。有 a JIRA entry 正好涵盖了这个问题。
  • 我不能直接指定版本号,因为这是 maven-release-plugin 将定义的版本号,我不知道。如果我预先设置它,那么 Maven 将无法找到依赖项,因为它尚未构建。

经过多天的试验,我需要将库版本与使用库作为依赖项和父项的应用程序版本分离。

是否可以让 maven-plugin-version 将属性的值(在我的例子中,即“dev-stack-version”)更新为它所操作项目的最终发布版本?

或者是否有一些我没有想到的明显解决方案?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...