为什么Gradle在我具体说明依赖关系时没有包括它们



我们正在改造现有的web应用程序,以使用JBoss 6 EAP和CXF包含SOAP服务。我的问题是,即使我明确地声明我希望在.war文件中包含某些依赖项(使用"compile{dependency}"),它们也不包含在内。它似乎与其他库有关。

为了成为一名优秀的蜜蜂,我将所有cxf依赖项都列为"providedCompile",因为JBoss-EAP已经将它们包含在模块目录中:

providedCompile "org.apache.cxf:cxf-rt-transports-http:2.6.8"
providedCompile "org.apache.cxf:cxf-api:2.6.8"
providedCompile "org.apache.cxf:cxf-rt-bindings-soap:2.6.8"
providedCompile "org.apache.cxf:cxf-rt-bindings-xml:2.6.8"
providedCompile "org.apache.cxf:cxf-rt-core:2.6.8"
providedCompile "org.apache.cxf:cxf-rt-databinding-jaxb:2.6.8"
providedCompile "org.apache.cxf:cxf-rt-frontend-jaxws:2.6.8"
providedCompile "org.apache.cxf:cxf-rt-frontend-simple:2.6.8"
providedCompile "org.apache.cxf:cxf-tools-common:2.6.8"
providedCompile "org.apache.cxf:cxf-tools-validator:2.6.8"
providedCompile "org.apache.cxf:cxf-tools-wsdlto-core:2.6.8"
providedCompile "org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb:2.6.8"

例如,我需要dom4j。我知道我需要它,因为我在启动时看到ClassNotFoundException。

所以我把它添加到我的依赖项中:

compile "dom4j:dom4j:1.6.1"

没有快乐。也就是说,直到我将上述所有"providedCompile"语句更改为"compile"。

我仍在制作一个简单的例子来发布在这里,但有人看到过这样奇怪的行为吗?为什么一个"providedCompile"依赖项会阻止另一个"compile"依赖关系包含在.war文件中?为什么我必须在.war中复制容器已经提供的库?

Gradle假设providedCompile配置的所有依赖项(包括直接传递依赖项)在目标环境中都可用,因此不将它们包括在War中。CCD_ 2可能是可传递的CCD_。如果您想表示在目标环境中只有直接的providedCompile依赖项可用(即在构建脚本中明确列出的依赖项),则可以设置configurations.providedCompile.transitive = false,或者选择性地使用@jar表示法(例如providedCompile "org.apache.cxf:cxf-rt-bindings-xml@jar:2.6.8")。

要检查在dom4j中拖动的providedCompile依赖项,请运行gradle dependencyInsight --configuration providedCompile --dependency dom4j

最新更新