JF *_*ier 7 java dependency-management maven
在Maven依赖有一个type
默认为元素jar
,但可以设置为ejb
,war
,ear
,等的类型ejb
是一个特例,因为它不会导致结尾的不同文件:在ejb
具有仍结局.jar
.
我有一个ear项目,其中相同的依赖项引用一次类型ejb
和一次类型jar
(在传递依赖树中).两个条目都要求使用不同的Maven"坐标"来生成相同的文件.
从dependencyConvergence
enforcer插件规则的角度来看,两个依赖关系似乎都不同 - <type>jar
依赖的版本 似乎不是由dependencyManagement管理的.然而,只有一个依赖关系进入ear
- 即<type>ejb
一个.
什么时候Maven"放弃"第二个依赖,我该怎么做才能影响这个?
请注意:我知道你不应该在你的依赖列表中有ejb
s jar
,但如果我杀了负责任的开发人员,我可能会去监狱.
我在 Eclipse 中创建了两个示例项目:一个 EAR,一个 EJB。
如果 EAR 的 POM 中的顺序是:
<dependency>
...
<type>jar</type>
<dependency>
...
<type>ejb</type>
Run Code Online (Sandbox Code Playgroud)
被ejb.jar
放置到.ear
唯一/lib
。
如果 EAR 的 POM 中的顺序是:
<dependency>
...
<type>ejb</type>
<dependency>
...
<type>jar</type>
Run Code Online (Sandbox Code Playgroud)
被ejb.jar
放置到 的 .ear
根并且/lib
.
显然这是 POM 中声明顺序很重要的罕见情况之一。
顺便说一句,只是为了说清楚:你的“相同的依赖关系被引用[...]不同的 Maven '坐标' ”是矛盾的。Maven 坐标是groupId
,artifactId
和version
(GAV),而不是packaging
和/或classifier
,因为后两者没有指定“Where?” 但“什么?”。这可能就是您引用“坐标”的原因。