2015-10-19 94 views
0

我试图使用org.jboss.bom组中的一些BOM来引入与EAP 6.3.0兼容的API堆栈。我的理解是,这就是他们的目的。但是,当我引用它们(使用“提供”或甚至“编译”范围)时,依赖关系不会变得可传递。鉴于“编译”范围用于BOM内部的项目,依赖机制的Maven's documentation似乎表明这些项目应该添加到我的项目的类路径中。然而,我得到了应该引入类的未定义符号。JBoss Maven BOM和传递依赖

例如,在项目P中,我包括org.jboss.bom.wfk:jboss-javaee-6.0-with-spring:2.4 .0-redhat-2 with'provided'scope,yet org.springframework.context.ApplicationContext is undefined in P.

这一切都发生在JBoss Dev Studio 8.1.0.GA中,如果这有所作为。

+0

'使用'提供的'范围'*确实*在这里有所作为。 – Tome

+0

@Tome我不认为“提供”所带来的差异解释了我所看到的。但是,谢谢你让我重新阅读Maven文档中的表格,因为我现在可以更清楚地描述我的问题。不知何故,当表中的依赖项的范围未指定时,表格给了我一个特定的结果。相应编辑描述... – nclark

+0

m2e插件版本为:m2e 1.5.1,m2e wtp 1.1.0,org.jboss.tools.maven。* 1.6.2 - 最终 – nclark

回答

0

我通过更详细地阅读Maven Dependency文档找出了解决方案。

这里是我的外卖:你的不能依赖于Eclipse m2e插件来通过Maven依赖性杂草看到你。知道何时/如何使用POM的<dependencyManagement>部分(以及何时不使用它)。当你想使用一个BOM特别知道具体的调用Maven的需求:导入BOM的<dependencyManagement>部分与pom<type>import<scope>,然后在“常规” <dependencies>节(<dependencyManagement>)特别调用您需要从POM获得子文物,但是省略了版本。 (全部拼写为here。)

BOM的目的不是让您通过仅引用BOM工件来大量导入依赖关系;相反,它要确保依赖关系的版本是正确的,正如BOM所定义的那样。

不要认为Maven允许您以逻辑/数学方式表达事物。了解如何取悦野兽,不要依赖巫师来为你解决这个问题。详细阅读Maven文档,找出食谱并精确地遵循它们。