【发布时间】:2013-11-28 04:37:08
【问题描述】:
我有一个项目,它的依赖树很大,即它包含来自多个团队的模块。
现在有一些常用的依赖项在多个模块中是通用的。
一个简化的例子可以是:
TopModule.jar
ChildModule.jar
CommonModule-v1.jar
CommonModule-v2.jar
当我构建我的项目时,我指定了公共依赖项的最新版本,但很难向其他团队提出同样的要求。
因此,TopModule 通常是使用不同版本的 CommonModule(上例中的 v1 和 v2)构建的。
我的问题是:
如果最终的jar文件同时包含CommonModule-v1.jar和CommonModule-v2.jar,对运行时有什么影响?
运行时是否会错误地加载需要 v1 的版本 v2,反之亦然?
【问题讨论】:
-
“最终的 jar 文件同时包含
CommonModule-v1.jar和CommonModule-v2.jar”是什么意思?您通常不会将 JAR 打包到其他 JAR 中。您的问题对于 Java 应用程序的通常部署方式并没有多大意义。 (在类路径的某处有一个所有传递依赖项的平面列表。) -
Maven会使用最新版本,你可以试试dependency:analyze-duplicate。
-
@millimoose,欢迎来到 maven
-
@user2250246 我对 Maven 非常了解,而您所描述的并不是 Maven 的工作方式。对于一个
mvn package只会对给定模块的类文件进行JAR,编译后它不会对依赖项做任何事情。如果您正在制作 WAR,那么它会将依赖项放入WEB-INF/lib/,但在这种情况下,它将选择其中一个版本,而不是两个版本。 (除非不同的版本有不同的groupId+artifactId,这不是 Maven 可以自动处理的。)那么,不如你描述实际发生的事情而不是油嘴滑舌呢? -
tl;dr:默认情况下,Maven 不会将
jars 放入其他jars 中。如果有,请发布相关配置。