Gradle shadow插件包也全部"提供"依赖性不应该是这种情况

时间:2015-11-04 14:59:06

标签: 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
}

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

编辑1: 这似乎也行不通,瞬态依赖仍然被复制到胖罐中。

shadowJar {
    dependencies {
        exclude(project(':rangeCache'))
    }
}

编辑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)
}

1 个答案:

答案 0 :(得分:1)

查看this article关于排除阴影jar依赖项的信息。

很快,根据这篇文章,仅通过shadowJar的依赖关系排除某些依赖关系不足以排除它的传递依赖关系,正如您已经提到的那样。解决方法如何做,就是修改运行时配置,从中排除一些依赖关系,如:

configurations {    
    runtime.exclude %what you need to exclude%
}

希望,这可能会有所帮助。