我正在使用BOM将其他项目的依赖项导入到我的中,我需要一种方法来引用已在所述BOM中声明的依赖项版本。到目前为止,我已尝试将依赖项版本列为BOM中的属性,但此方法失败,因为属性未导入BOM。
我已经看到Dependency Plugin的dependency:properties目标几乎正是我所需要的,但是我没有给我一个工件的完整路径,而是需要将该版本作为属性。那里有什么可以给我一个已解决的工件的版本作为属性吗?
更新 - '为什么不使用父pom?'
我经常发现自己在应用程序服务器环境中工作,其中提供的依赖项是使用BOM工件指定的(因为它似乎已成为分发相互关联的工件组的一种常见/标准方式,即{{3} })。因此,我想将BOM视为事实的唯一来源。执行类似重新删除已经在BOM中定义的依赖版本属性的想法似乎不正确。
如果我要在镜像应用服务器环境的父pom中定义属性,我现在不得不担心保持父pom属性和BOM属性同步 - 为什么在那时甚至都有BOM?
依赖树上已经有了这些信息,这只是暴露它的问题......
答案 0 :(得分:9)
无法为此找到任何现有的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的:类型[:分类] .version
即。
io.undertow:暗流核:jar.version = 1.3.15.Final
查看README以获取有关如何使用该插件的更多信息。它可用@ Maven Central:
<dependency>
<groupId>io.reformanda.semper</groupId>
<artifactId>dependencyversion-maven-plugin</artifactId>
<version>1.0.0</version>
</dependency>
...插件一直向下......
答案 1 :(得分:4)
简短回答 - 是的,你可以。
详细说明你的root 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中使用属性,则可以
答案 2 :(得分:0)
这个maven插件位于Github(https://github.com/semper-reformanda/dependencyversion-maven-plugin)上,对于任何处理Dependency版本的人来说都是必须的,例如在使用Webjars依赖时 - 您可以将Webjar版本号直接注入到您的Web资源中。
我一直在寻找这样的功能很长一段时间,我希望有更多人遇到它并且它在Maven中心上升(我实际上认为它应该是Maven开箱即用的)