java - 与 "ejb"和 "jar"相同的依赖关系——会发生什么?

标签 java maven dependency-management

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 coordinatesgroupIdartifactIdversion (GAV),而不是 packaging 和/或 classifier,因为后两者没有指定“Where?”但是“什么?”。这可能就是您引用“坐标”的原因。

关于java - 与 "ejb"和 "jar"相同的依赖关系——会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42250594/

相关文章:

java - DBUnit 在 H2 表中插入时间戳默认值解析错误

java - Maven:一种跳过选定站点部署问题管理的方法

maven - 如何防止覆盖 hudson 上的 Maven 存储库中已发布的 Artifact (非快照版本)

java - 如何处理重大框架/依赖升级?

playframework - sbt 中 Unresolved 依赖关系

java - 如何从 spring-boot-starter-parent 中排除特定的依赖项

java - 如何完全按原样替换字符串?

java - 根据参数/用户选择更新 sqlite 表属性

java - NetBeans中的警报或对话框

java - Maven 中的混合 Clojure 和 Java 项目