Maven 中的依赖项有一个 type
默认为 jar
的元素, 但可以设置为 ejb
, war
, ear
等类型ejb
是一种特殊情况,因为它不会导致不同的文件结尾: ejb
还有结局.jar
.
我有一个 ear 项目,其中相同的依赖项被引用一次,类型为 ejb
一次输入 jar
(在传递依赖树中)。两个条目都要求使用相同的文件,但 Maven“坐标”不同。
从dependencyConvergence
的角度来看enforcer 插件的规则,两个依赖项似乎不同 - <type>jar
的版本依赖似乎不是由 dependencyManagement 管理的。然而,只有一个依赖项进入了 ear
- 即 <type>ejb
一个。
Maven 何时“删除”第二个依赖项,我可以做些什么来影响它?
请注意:我知道你不应该有 ejb
作为jar
s 在你的依赖列表上,但如果我杀了负责的开发人员,我可能会进 jail 。
最佳答案
我在 Eclipse 中创建了两个示例项目:一个 EAR,一个 EJB。
如果 EAR 的 POM 中的顺序是:
<dependency>
...
<type>jar</type>
<dependency>
...
<type>ejb</type>
ejb.jar
只放在.ear
的/lib
中。
如果 EAR 的 POM 中的顺序是:
<dependency>
...
<type>ejb</type>
<dependency>
...
<type>jar</type>
ejb.jar
被放入.ear
的根目录和/lib
。
显然这是 POM 中的声明顺序很重要的罕见情况之一。
顺便说一句,只是为了说清楚:您的“引用了相同的依赖项 [...] 具有不同的 Maven ‘坐标’”是矛盾的。 Maven coordinates是 groupId
、artifactId
和 version
(GAV),而不是 packaging
和/或 classifier
,因为后两者没有指定“Where?”但是“什么?”。这可能就是您引用“坐标”的原因。
关于java - 与 "ejb"和 "jar"相同的依赖关系——会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42250594/