Gradle trump提供编译和#x27;什么是排除?

Gradle trump提供编译和#x27;什么是排除?,gradle,Gradle,我有一个项目,我想使用providedCompile来避免它的libs。然而,这阻止了我引入我确实需要的另一个项目的LIB。文档说:如果你不想要这种可传递的行为,只需声明你提供的依赖项,但它没有给出一个如何做到这一点的例子 以下是我的依赖项的基本情况: dependencies { compile(project(':common')) providedCompile(project(':projA')) // <-- also depends on :common }

我有一个项目,我想使用providedCompile来避免它的libs。然而,这阻止了我引入我确实需要的另一个项目的LIB。文档说:如果你不想要这种可传递的行为,只需声明你提供的依赖项,但它没有给出一个如何做到这一点的例子

以下是我的依赖项的基本情况:

dependencies {
    compile(project(':common'))
    providedCompile(project(':projA')) // <-- also depends on :common
}
如果您不想要这种可传递的行为,只需声明您提供的依赖项即可

这意味着,如果您不希望projA的所有依赖项都被声明,那么您需要逐个列出它们

来自Gradle 1.8用户指南'26.4。依赖关系管理'

War插件添加了两个依赖项配置:providedCompile和providedCompile 提供运行时。这些配置的作用域与 各自的编译和运行时配置,除了 没有添加到战争档案中。值得注意的是,这些 提供的配置可以过渡地工作。 假设您将commons-httpclient:commons-httpclient:3.0添加到任何 所提供的配置。此依赖项依赖于 通用编解码器。这意味着httpclient和commons编解码器都不可用 添加到您的WAR中,即使commons编解码器是一个明确的依赖项 编译配置的一部分。如果你不想让它传递 行为,只需声明提供的依赖项,如 commons-httpclient:commons-httpclient:3。0@jar.


还有一个更好的解决方案似乎正在发挥作用。使用
transitive=false
可以排除编译过程中丢失的所有可传递依赖项,并且必须手动声明所有这些依赖项(如提供的一样),如果它们还包括所需的库,这将是一件痛苦的事情

因此,对于providedCompile语句,不排除所有可传递依赖项,而只排除希望通过单独的compile语句包含在war中的依赖项

我需要war文件中包含的commons编解码器,但该编解码器也放在Key斗篷服务和Key斗篷模型jpa中的实例:

providedCompile         ("org.keycloak:keycloak-model-jpa:6.0.1") {
    exclude group: 'commons-codec', module: 'commons-codec'
}
providedCompile         ("org.keycloak:keycloak-services:6.0.1") {
    exclude group: 'commons-codec', module: 'commons-codec'
}
providedCompile         "org.keycloak:keycloak-core:6.0.1"
providedCompile         "org.keycloak:keycloak-server-spi:6.0.1"
providedCompile         "org.keycloak:keycloak-server-spi-private:6.0.1"
compile                 "commons-codec:commons-codec:1.10"

啊,真糟糕。我一次只能声明一个jar,您可以尝试从providedCompile声明中排除common
providedCompile(project(':projA')){exclude project(':common')}
但我不知道它是否有效。@ChrisKessel你试过了吗?是和否。一次排除一个主题的想法很痛苦,而且我不想每次“projA”添加一个新jar时都要更新我的项目。所以我尝试了一下,发现了一些有效的方法。我已经用破解/解决方案更新了原始问题。
providedCompile         ("org.keycloak:keycloak-model-jpa:6.0.1") {
    exclude group: 'commons-codec', module: 'commons-codec'
}
providedCompile         ("org.keycloak:keycloak-services:6.0.1") {
    exclude group: 'commons-codec', module: 'commons-codec'
}
providedCompile         "org.keycloak:keycloak-core:6.0.1"
providedCompile         "org.keycloak:keycloak-server-spi:6.0.1"
providedCompile         "org.keycloak:keycloak-server-spi-private:6.0.1"
compile                 "commons-codec:commons-codec:1.10"