在Maven可选依赖项中指定版本

时间:2019-01-03 14:42:47

标签: maven dependency-management

我有一个图书馆项目,我正在考虑将一些依赖项作为可选项添加,因为只有在JDK9 +上编译和运行的项目才需要它们。

但是,关于可选依赖项的documentation并未阐明是否可以可选地依赖于特定版本,即是否可以在库pom文件中放入类似的内容

<dependency>
    <groupId>com.foo</groupId>
    <artifactId>dependency-a</artifactId>
    <version>2.0</version>
    <optional>true</optional>
</dependency>

并且以某种方式确保依赖于我的库并且还想包含dependency-a的项目将依赖于2.0版。

据我了解,将dependency-a设置为可选项意味着依赖于我的库的项目不会可传递地依赖于它,但是如果需要一些其他的(可选)它们可以显式地将其添加到自己的依赖项中。库中的功能。

是否有办法确保他们要添加dependency-a取决于特定版本?

如果一个项目取决于我的图书馆,将会发生什么

<dependency>
    <groupId>com.foo</groupId>
    <artifactId>dependency-a</artifactId>
    <version>1.0</version>
</dependency>

1.0版与2.0版不兼容吗?

如果无法对可选依赖项实施版本,那么为可选依赖项设置版本有什么意义呢?

我也一直在研究maven enforcer plugin,因为它似乎可以处理类似的情况,但是我想知道是否有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

我对optional的理解如下:

如果您将依赖项声明为可选,则它会保留在编译类路径中(因此需要版本),但对于库的用户而言不会传递可见。因此,您的库用户需要将自己的依赖项(具有明智的版本)添加到其POM中。

我也看不到您要如何使用强制实施程序插件,因为您的库用户将不会“看到”您在POM中拥有的插件。

为便于使用,我建议针对不同的Java版本使用两个不同的jar,以分类器或版本(例如1.2.3-JDK8、1.2.3-JDK9)分隔。