3 回答

TA贡献1775条经验 获得超8个赞
我们是一家大公司,我们经常遇到这个问题。我们拥有跨越多个开发人员组的大型依赖树。我们所做的:
我们通过由 jar 的维护者发布的“推荐版本”的 BOM(Maven 依赖管理列表)来管理版本。这样,我们确保使用最新版本的工件。
我们尝试通过将开发人员组内部使用的功能与他们提供给其他组的功能分开来减少大型依赖树。
但我承认我们仍在努力寻找更好的策略。我还要提一下,使用“微服务”是解决这个问题的一种策略,但在许多情况下,这对我们来说不是一个有效的策略(主要是因为我们不能再在数据库上进行全局事务)。

TA贡献1772条经验 获得超5个赞
在Maven多模块项目中,POM在做统一版本管理的时候,依赖管理节点一般都定义在父文件中。节点类声明的依赖节点的内容是关于统一定义的资源版本。直接定义的依赖节点中的资源不需要引入版本阶段。海关的内容如下:
在父 pom 中
<dependencyManagement>
<dependencies >
<dependency >
<groupId>com.devzuz.mvnbook.proficio</groupId>
<artifactId>proficio-model</artifactId>
<version>${project.version}</version>
</dependency >
</dependencies >
</dependencyManagement>
在你的模块中,你不需要设置版本
<dependencies >
<dependency >
<groupId>com.devzuz.mvnbook.proficio</groupId>
<artifactId>proficio-model</artifactId>
</dependency >
</dependencies >
这将避免不一致的问题。

TA贡献1982条经验 获得超2个赞
这是java世界中的普遍问题。
您最好的选择是定期维护和更新packageA 和 packageB 的依赖项。
如果您可以控制这些应用程序 - 花时间去做。如果您没有控制权,请要求供应商或作者进行定期更新。
如果 packageA 和 packageB 都在内部使用,您可以使用以下做法:让您公司的所有内部项目都引用parent
Mavenpom.xml
中定义常用第三方库的“最新”版本的 a。
例如:
<framework.jersey>2.27</framework.jersey> <framework.spring>4.3.18.RELEASE</framework.spring> <framework.spring.security>4.2.7.RELEASE</framework.spring.security>
因此,如果您的项目“A”使用 spring,如果它们使用您公司的“父”pom 的最新版本,则它们都应该使用 4.3.18.RELEASE。
当新版本的 spring 发布并且需要时,您更新公司的父 pom,并强制所有其他项目使用该最新版本。
这将解决许多依赖项不匹配问题。
别担心,这在java世界中很常见,你并不孤单。只需谷歌“罐子地狱”,你就可以在更广泛的背景下理解这个问题。
顺便说一下mvn dependency:tree
,您的朋友可以隔离这些依赖问题。
添加回答
举报