Maven 是否有办法将依赖版本作为 属性?
Does Maven have a way to get a dependency version as a property?
我正在使用 BOM 将依赖项从另一个项目导入到我的项目中,我需要一种方法来引用已在所述 BOM 中声明的依赖项版本。到目前为止,我已经尝试在 BOM 中将依赖项版本列为 属性,但这种方法失败了,因为属性不会与 BOM 一起导入。
我已经看到依赖插件的 dependency:properties 目标 几乎 完全符合我的需要,但我没有提供工件的完整路径,而是需要版本为 属性。有没有什么东西可以给我一个已解决的工件的版本 属性?
更新 - 'Why not use a parent pom?'
我经常发现自己在应用程序服务器环境中工作,其中提供的依赖项是用 BOM 工件指定的(因为这似乎已成为一种 common/standard 分发相互关联的工件组的方式,即widlfly)。因此,我想将 BOM 视为唯一的真实来源。执行类似 re-delcaring 已经在 BOM 中定义的依赖版本 属性 的想法似乎是不正确的。
如果我要在反映应用程序服务器环境的父 pom 中定义属性,我现在必须担心保持父 pom 属性和 BOM 属性同步——为什么那时还要有 BOM?
相关信息在依赖树上已经可用,只需要公开它...
简答 - 是的,你可以。
详细来说,你的根 pom.xml:
<properties>
<slf4j.version>1.7.21</slf4j.version>
</properties>
...
<dependencyManagement>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
...
</dependencyManagement>
在模块中 pom.xml:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
...
</dependencies>
您也可以使用 ${slf4j.version} 值来过滤资源或插件配置。
更新
如果您不能在父 POM 中使用属性,您可以
- 使用 dependency:list 插件检索所有依赖项及其版本;或者
- 一起使用dependency:list+antrun:run插件;或者
- 配置 CI 服务器脚本来为您完成(例如 this 示例);或者
- 编写自定义插件来处理您的版本逻辑。
找不到任何现有的 maven 或插件功能,所以我分叉了旧的 dependencypath-maven-plugin 并将其更改为使用版本。现在我可以加入这样的插件了:
<build>
.
.
<plugins>
.
.
<plugin>
<groupId>io.reformanda.semper</groupId>
<artifactId>dependencyversion-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>set-all</id>
<goals>
<goal>set-version</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
并像这样访问属性:
groupId:artifactId:type[:classifier].version
即
io.undertow:undertow-core:jar.version=1.3.15.Final
查看 README for more info on how to use the plugin. It's available @ Maven Central:
<dependency>
<groupId>io.reformanda.semper</groupId>
<artifactId>dependencyversion-maven-plugin</artifactId>
<version>1.0.0</version>
</dependency>
...插件一直向下...
这个 maven 插件在 Github (https://github.com/semper-reformanda/dependencyversion-maven-plugin) 上,对于处理依赖版本的任何人来说都是必须的,例如在使用 Webjars 依赖项时 - 你可以将 Webjar 版本号直接注入你的网络资源。
我一直在寻找这样的功能,我希望更多的人遇到它并且它在 Maven Central 上出现(我实际上认为它应该与 Maven 开箱即用)
我正在使用 BOM 将依赖项从另一个项目导入到我的项目中,我需要一种方法来引用已在所述 BOM 中声明的依赖项版本。到目前为止,我已经尝试在 BOM 中将依赖项版本列为 属性,但这种方法失败了,因为属性不会与 BOM 一起导入。
我已经看到依赖插件的 dependency:properties 目标 几乎 完全符合我的需要,但我没有提供工件的完整路径,而是需要版本为 属性。有没有什么东西可以给我一个已解决的工件的版本 属性?
更新 - 'Why not use a parent pom?'
我经常发现自己在应用程序服务器环境中工作,其中提供的依赖项是用 BOM 工件指定的(因为这似乎已成为一种 common/standard 分发相互关联的工件组的方式,即widlfly)。因此,我想将 BOM 视为唯一的真实来源。执行类似 re-delcaring 已经在 BOM 中定义的依赖版本 属性 的想法似乎是不正确的。
如果我要在反映应用程序服务器环境的父 pom 中定义属性,我现在必须担心保持父 pom 属性和 BOM 属性同步——为什么那时还要有 BOM?
相关信息在依赖树上已经可用,只需要公开它...
简答 - 是的,你可以。
详细来说,你的根 pom.xml:
<properties>
<slf4j.version>1.7.21</slf4j.version>
</properties>
...
<dependencyManagement>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
...
</dependencyManagement>
在模块中 pom.xml:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
...
</dependencies>
您也可以使用 ${slf4j.version} 值来过滤资源或插件配置。
更新
如果您不能在父 POM 中使用属性,您可以
- 使用 dependency:list 插件检索所有依赖项及其版本;或者
- 一起使用dependency:list+antrun:run插件;或者
- 配置 CI 服务器脚本来为您完成(例如 this 示例);或者
- 编写自定义插件来处理您的版本逻辑。
找不到任何现有的 maven 或插件功能,所以我分叉了旧的 dependencypath-maven-plugin 并将其更改为使用版本。现在我可以加入这样的插件了:
<build>
.
.
<plugins>
.
.
<plugin>
<groupId>io.reformanda.semper</groupId>
<artifactId>dependencyversion-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>set-all</id>
<goals>
<goal>set-version</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
并像这样访问属性:
groupId:artifactId:type[:classifier].version
即
io.undertow:undertow-core:jar.version=1.3.15.Final
查看 README for more info on how to use the plugin. It's available @ Maven Central:
<dependency>
<groupId>io.reformanda.semper</groupId>
<artifactId>dependencyversion-maven-plugin</artifactId>
<version>1.0.0</version>
</dependency>
...插件一直向下...
这个 maven 插件在 Github (https://github.com/semper-reformanda/dependencyversion-maven-plugin) 上,对于处理依赖版本的任何人来说都是必须的,例如在使用 Webjars 依赖项时 - 你可以将 Webjar 版本号直接注入你的网络资源。
我一直在寻找这样的功能,我希望更多的人遇到它并且它在 Maven Central 上出现(我实际上认为它应该与 Maven 开箱即用)