JBoss Maven BOM 和传递依赖项
JBoss Maven BOMs and transitive dependencies
我正在尝试使用 org.jboss.bom 组中的多个 BOM 来引入与 EAP 6.3.0 兼容的 API 堆栈。我的理解是,这就是他们的目的。但是当我引用它们时(使用 'provided' 甚至 'compile' 范围),依赖项不会变得可传递。鉴于 "compile" 范围用于 BOM 内的项目,依赖机制的 Maven's documentation 似乎表明应将这些项目添加到我的项目的类路径中。然而,我得到了应该引入的 类 的未定义符号。
例如,在项目 P 中,我包括 org.jboss.bom.wfk:jboss-javaee-6.0-with-spring:2.4.0-redhat-2 和'provided' 范围,但 org.springframework.context.ApplicationContext 在 P.
中未定义
这一切都发生在 JBoss Dev Studio 8.1 中。0.GA,如果这有所不同的话。
我通过更详细地阅读 Maven 依赖文档找到了解决方案。
这是我的结论:您不能 依赖 Eclipse m2e 插件来帮助您解决 Maven 依赖问题。了解 when/how 使用 POM 的 <dependencyManagement>
部分(以及何时不使用它)。当您想要使用 BOM 时,请特别了解 Maven 需要的特定调用:将 BOM 导入 <dependencyManagement>
部分,其中 <type>
of pom
和 <scope>
of import
,然后在"regular"<dependencies>
部分(not<dependencyManagement>
)专门从POM中调出你需要的子工件,但是省略版本。 (都拼出来了here。)
BOM 的目的不是让您通过仅引用 BOM 工件来大量导入依赖项;相反,它是为了确保依赖项的版本是 BOM 定义的正确版本。
不要假设 Maven 允许您用 logically/mathematically 简化的术语表达事物。找出如何取悦野兽,不要依赖巫师为你解决这个问题。详细阅读 Maven 文档,找出食谱并严格按照它们进行操作。
我正在尝试使用 org.jboss.bom 组中的多个 BOM 来引入与 EAP 6.3.0 兼容的 API 堆栈。我的理解是,这就是他们的目的。但是当我引用它们时(使用 'provided' 甚至 'compile' 范围),依赖项不会变得可传递。鉴于 "compile" 范围用于 BOM 内的项目,依赖机制的 Maven's documentation 似乎表明应将这些项目添加到我的项目的类路径中。然而,我得到了应该引入的 类 的未定义符号。
例如,在项目 P 中,我包括 org.jboss.bom.wfk:jboss-javaee-6.0-with-spring:2.4.0-redhat-2 和'provided' 范围,但 org.springframework.context.ApplicationContext 在 P.
中未定义这一切都发生在 JBoss Dev Studio 8.1 中。0.GA,如果这有所不同的话。
我通过更详细地阅读 Maven 依赖文档找到了解决方案。
这是我的结论:您不能 依赖 Eclipse m2e 插件来帮助您解决 Maven 依赖问题。了解 when/how 使用 POM 的 <dependencyManagement>
部分(以及何时不使用它)。当您想要使用 BOM 时,请特别了解 Maven 需要的特定调用:将 BOM 导入 <dependencyManagement>
部分,其中 <type>
of pom
和 <scope>
of import
,然后在"regular"<dependencies>
部分(not<dependencyManagement>
)专门从POM中调出你需要的子工件,但是省略版本。 (都拼出来了here。)
BOM 的目的不是让您通过仅引用 BOM 工件来大量导入依赖项;相反,它是为了确保依赖项的版本是 BOM 定义的正确版本。
不要假设 Maven 允许您用 logically/mathematically 简化的术语表达事物。找出如何取悦野兽,不要依赖巫师为你解决这个问题。详细阅读 Maven 文档,找出食谱并严格按照它们进行操作。