我有一个图书馆项目,我正在考虑将一些依赖项作为可选项添加,因为只有在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,因为它似乎可以处理类似的情况,但是我想知道是否有更好的解决方案。
答案 0 :(得分:0)
我对optional
的理解如下:
如果您将依赖项声明为可选,则它会保留在编译类路径中(因此需要版本),但对于库的用户而言不会传递可见。因此,您的库用户需要将自己的依赖项(具有明智的版本)添加到其POM中。
我也看不到您要如何使用强制实施程序插件,因为您的库用户将不会“看到”您在POM中拥有的插件。
为便于使用,我建议针对不同的Java版本使用两个不同的jar,以分类器或版本(例如1.2.3-JDK8、1.2.3-JDK9)分隔。