梯度 war : how to force inclusion of transitively provided dep?

标签 gradle

有了这个build.gradle:

apply plugin: 'war'

repositories {
    mavenCentral()
    maven { url "http://repository.jboss.org/nexus/content/groups/public" }
}

configurations {
    providedCompile {
        exclude module: 'commons-httpclient' // here it doesn't work
    }
}

dependencies {
    compile 'commons-httpclient:commons-httpclient:3.1'

    providedCompile ('org.jboss.resteasy:resteasy-jaxrs:2.3.3.Final') {
        //exclude module: 'commons-httpclient' // here it works
    }
}

我预计会有这场 war :

WEB-INF/
WEB-INF/lib/
WEB-INF/lib/commons-httpclient-3.1.jar

但只有这个:

WEB-INF/

如果我取消注释第二个排除并注释第一个排除,它会根据需要工作。

如果这是预期的行为,我怎样才能从提供的库中全局排除特定的传递性?

最佳答案

事实证明,这是“正确”发生的事情,因为 compile 实际上是从 providedCompile 扩展而来的:

apply plugin: 'war'

configurations.compile.extendsFrom.each {
    println "$it"
}

所以,我的解决方案如下:

apply plugin: 'war'

repositories {
    mavenCentral()
    maven { url "http://repository.jboss.org/nexus/content/groups/public" }
}

configurations {
    forceInclude {}
}

dependencies {
    providedCompile 'org.jboss.resteasy:resteasy-jaxrs:2.3.3.Final'

    forceInclude 'commons-httpclient:commons-httpclient:3.1'
}

war {
    classpath += configurations.forceInclude
}

关于梯度 war : how to force inclusion of transitively provided dep?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12687672/

相关文章:

android - 在 Mac OS 上使用 gradle 从 SVG for Android 生成可绘制对象

groovy - 什么是运算符<<(小于两倍)在gradle中?

android - 找不到参数的方法 firebaseAppDistribution()

gradle - 为什么包含特定的 jar 文件?

android - Android内部版本号

android - 任务 'Project:processDebugManifest' 的 Gradle 执行失败

android - 虽然 Android Studio 更新到 v3.3 获取 API 'variant.getAssemble()' 已过时并已替换为 'variant.getAssembleProvider()'

android - 无法在Android上使用build.gradle覆盖bool资源

java - 显示错误 "Supertypes of the following classes cannot be resolved.",没有任何类列表

gradle - Mercurial拒绝不忽略Gradle包装器工件