是否有可能从封闭项目中继承一个依赖项次要版本的Maven库?

时间:2016-01-04 01:47:52

标签: java spring maven

我想将库构建为依赖于某些Spring库(版本3)的Maven项目。

我希望在同样使用Spring 3的项目中使用它 - 但我不希望版本发生冲突,否则我们将在类路径上拥有两个版本的spring库。

我想从封闭项目中获取我的库pom.xml的次要版本。

我的问题是:是否有可能从封闭项目中继承一个依赖项次要版本的Maven库?

2 个答案:

答案 0 :(得分:2)

我相信你担心一些不会发生的事情。同一工件的不同依赖关系之间的冲突版本将由名为dependency mediation的进程解决,而Maven将 将同一工件的多个版本拉入到相同的类路径。例如,如果您使您的资源库your-group:your-library:1.0依赖于org.springframework:spring-context:3.2.4.RELEASE,而我的项目my-group:my-artifact:1.0取决于org.springframework:spring-context:3.1.4.RELEASEyour-group:your-library:1.0,那么Maven将只提取版本{ {1}} 3.1.4进入我的版本, spring-context3.1.4。如果您的库也依赖3.2.4并且spring-beans:3.2.4spring-context:3.1.4之间恰好存在某些不兼容性,那么您可以认为我的项目责任是将spring-beans:3.2.4添加为依赖项在spring-beans的POM中explicitly override its version3.1.4

话虽这么说,你可以排序使用version ranges完成你的问题直接提出的问题:

my-artifact

这将有效地告诉项目取决于您的库,您的库可以使用任何现有<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>[3.0.0.RELEASE,3.2.16.RELEASE]</version> </dependency> 版本的3.X,但version ranges have their own set of rules在依赖中介期间可能是不友好和模糊的,并且他们也不会在不同的工件之间建立链接,因此我建议您只使用常规版本号。

答案 1 :(得分:0)

不是,不。

您是否乐意为此目的在父pom中声明变量?如果没有,那么你将不得不在项目pom或从封闭项目继承的新父pom中创建变量。 ${project.version}${project.parent.version}不是由其他变量构建的,您无法编写/分解它们;您需要将这些值复制到其他变量中,并根据这些变量构建版本字符串。

即使你这样做,maven也会抱怨版本不是常数。

在这种情况下,正常模式是完全忽略父版本并独立维护项目的版本:仅仅因为您的项目使用Spring 3并不意味着它不应该从版本1开始。您可以手动如果您愿意,可以跟踪父版本。由于您的项目不是父项目的一部分,因此省略$ {project.version}并从父项目继承它的maven约定可能不合适。