我想将库构建为依赖于某些Spring库(版本3)的Maven项目。
我希望在同样使用Spring 3的项目中使用它 - 但我不希望版本发生冲突,否则我们将在类路径上拥有两个版本的spring库。
我想从封闭项目中获取我的库pom.xml的次要版本。
我的问题是:是否有可能从封闭项目中继承一个依赖项次要版本的Maven库?
答案 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.RELEASE
和your-group:your-library:1.0
,那么Maven将只提取版本{ {1}} 3.1.4
进入我的版本, 不 spring-context
和3.1.4
。如果您的库也依赖3.2.4
并且spring-beans:3.2.4
和spring-context:3.1.4
之间恰好存在某些不兼容性,那么您可以认为我的项目责任是将spring-beans:3.2.4
添加为依赖项在spring-beans
的POM中explicitly override its version到3.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约定可能不合适。