Maven是否有办法将依赖版本作为属性获取?

时间:2016-06-09 20:53:23

标签: java maven maven-bom

我正在使用BOM将其他项目的依赖项导入到我的中,我需要一种方法来引用已在所述BOM中声明的依赖项版本。到目前为止,我已尝试将依赖项版本列为BOM中的属性,但此方法失败,因为属性未导入BOM。

我已经看到Dependency Plugin的dependency:properties目标几乎正是我所需要的,但是我没有给我一个工件的完整路径,而是需要将该版本作为属性。那里有什么可以给我一个已解决的工件的版本作为属性吗?

更新 - '为什么不使用父pom?'

我经常发现自己在应用程序服务器环境中工作,其中提供的依赖项是使用BOM工件指定的(因为它似乎已成为分发相互关联的工件组的一种常见/标准方式,即{{3} })。因此,我想将BOM视为事实的唯一来源。执行类似重新删除已经在BOM中定义的依赖版本属性的想法似乎不正确。

如果我要在镜像应用服务器环境的父pom中定义属性,我现在不得不担心保持父pom属性和BOM属性同步 - 为什么在那时甚至都有BOM?

依赖树上已经有了这些信息,这只是暴露它的问题......

3 个答案:

答案 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中使用属性,则可以

  • 使用dependency:list插件检索所有依赖项及其版本;或
  • 一起使用依赖:list + antrun:run plugin;或
  • 配置CI服务器脚本以便为您执行此操作(例如,使用this示例);或
  • 编写自定义插件来处理您的版本逻辑。

答案 2 :(得分:0)

这个maven插件位于Github(https://github.com/semper-reformanda/dependencyversion-maven-plugin)上,对于任何处理Dependency版本的人来说都是必须的,例如在使用Webjars依赖时 - 您可以将Webjar版本号直接注入到您的Web资源中。

我一直在寻找这样的功能很长一段时间,我希望有更多人遇到它并且它在Maven中心上升(我实际上认为它应该是Maven开箱即用的)