maven - 在 pom.xml 中调用属性的层次结构
问题描述
我有一个包含多个嵌套项目的 Maven 项目。它们都始终具有相同的版本。到目前为止,如果我想增加版本,我浏览了所有 pom.xml 文件并更改了版本号。
现在,我想将版本外包给父 pom.xml 文件的属性标记。它适用于所有嵌套项目,但不适用于父 pom 本身。
pom.xml 中的属性是按什么顺序调用的?我无法在父 pom.xml 文件中引用项目版本。
代码片段显示了父 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>com.my.project</groupId>
<artifactId>my.project</artifactId>
<packaging>pom</packaging>
<version>${projectVersion}</version>
<properties>
<projectVersion>1.0.0</projectVersion>
...
</properties>
<modules>
<module>my.project.service</module>
<module>my.project.db</module>
...
</modules>
我希望 pom 采用属性中定义的版本号。但是由于错误无效的参考格式而无法构建
解决方案
我希望 pom 采用属性中定义的版本号。但是由于错误无效的参考格式而无法构建
通过从父项目运行一个maven目标,maven首先在当前构建过程中绑定了artifact/group/version,所以它使用这里定义的版本:
<version>${projectVersion}</version>
我无法在父 pom.xml 文件中引用项目版本。
在这种情况下,您可以通过创建一个聚合器/多模块项目来“作弊”,该项目定义了一个未使用/伪造的版本(1.0-NOT-USED
例如),该版本具有父 pom.xml 的唯一模块。当您构建聚合器/多模块项目时,您现在可以将要在父项目及其所有模块中使用的版本作为参数传递。
附带说明一下,要为一组项目使用中央版本,您应该使用flatten maven 插件,它可以让您从地狱版本管理中解脱出来。
推荐阅读
- cucumber - 如何从 cypress gherkin 设置中的场景大纲中获取场景名称?
- compiler-construction - LLVM 如何进行活性分析?
- javascript - 创建大小为 100% 的容器宽度的未知大小图像行
- c - 为什么我的 C mpi 程序中没有字符串?
- java - 您如何处理 JLabel 类?它说,“JLabel 不是一个声明”的错误
- azure - Azure Blob 存储 Spark
- javascript - Sweet Alert 2,自定义按钮
- ffmpeg - 带有缩略图块的 FFMPEG Dash
- google-home - 如何在 Google home 的风扇上实现百分比控制器?
- c# - 带有 if-else 条件的 Azure Bot 对话框