Gradle shadow插件包也是所有"提供"的依赖项,不应该是这种情况

KIC*_*KIC 6 gradle

我想要一个胖罐但没有提供的依赖项.所以我使用以下两个插件:

并有一个build.gradle文件,如下所示:

apply plugin: 'nebula.provided-base'
apply plugin: 'com.github.johnrengelman.shadow'

archivesBaseName = 'range-cache-drivers'
group = 'com.engine'
version = '0.302-SNAPSHOT'

buildDir = 'target'

sourceCompatibility = 1.8
targetCompatibility = 1.8


dependencies {
    provided project(':rangeCache')

    // CSV, TSV, Fixe width
    compile deps.univocityParsers
    // MongoDB
    compile deps.mongo
    // Cassandra
    compile deps.cassandradx
    compile deps.cassandraSnappy
    compile deps.cassandraLZ4
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行时,gradle shadowJar我仍然在我的胖罐中拥有所有rangeCache类.如何从胖箱中排除提供的依赖项?

编辑1:这似乎也不起作用,瞬态依赖仍然被复制到胖罐.

shadowJar {
    dependencies {
        exclude(project(':rangeCache'))
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑2:根据斯坦尼斯拉夫的回答,我做了以下工作以使工作正常:

configurations {
    shadow
    compile.extendsFrom provided
    provided.extendsFrom shadow
}

dependencies {
    provided project(':rangeCache')

    // CSV, TSV, Fixe width
    shadow deps.univocityParsers

    // MongoDB
    shadow deps.mongo

    // Cassandra
    shadow deps.cassandradx
    shadow deps.cassandraSnappy
    shadow deps.cassandraLZ4

    testCompile deps.junit
}

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

task fatJar(type: ShadowJar) {
    configurations = [project.configurations.shadow]
    from(project.sourceSets.main.output)
}
Run Code Online (Sandbox Code Playgroud)

Sta*_*lav 1

看一下这篇关于排除影子 jar 依赖项的文章。

不久,根据本文,仅通过shadowJar的依赖项排除某些依赖项不足以排除其传递依赖项,正如您已经提到的那样。解决方案是修改运行时配置,以排除某些依赖项,例如:

configurations {    
    runtime.exclude %what you need to exclude%
}
Run Code Online (Sandbox Code Playgroud)

我希望,它会有所帮助。