微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我们有一个构建场景,结果证明它对于 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?