我想用gradle创建胖 jar . 我正在使用shadowJar插件(com.github.johnrengelman.shadow) .

我面临的问题是我无法找到一种方法来指示插件将某些库与其传递依赖关系打包 .

例如:我使用的是依赖于org.apache.httpcomponents的hive-jdbc:httpclient:4.5.2,但是shadowJar打包的最终jar不包含httpclient

另一种选择是从gradle.build文件中删除shadowJar部分,但是插件将包含编译类路径中的所有内容,并且将创建巨大的jar文件 .

我正在使用这个构建文件来打包一个包含许多库的spark-submmit的jar作为运行时环境的一部分,所以我不需要打包所有的编译依赖项(只是我明确指定的那些和它们的传递依赖)

的build.gradle:

import com.github.jengelman.gradle.plugins.shadow.transformers.AppendingTransformer

plugins {
    id "com.github.johnrengelman.shadow" version "2.0.3"
}


apply from: "../Parent_2.2/build.gradle"
group 'com.ebates.bigdata'
version '1.0-SNAPSHOT'

dependencies{
    compile("com.databricks:spark-avro_2.11:4.0.0"){force = true}
    compile("org.apache.hadoop:hadoop-client:2.6.5"){force = true}
    compile("org.apache.hadoop:hadoop-aws:2.6.5"){force = true}
    compile("org.postgresql:postgresql:9.4.1207"){force = true}
    compile("org.apache.hive:hive-jdbc:2.2.0"){force = true}
}
configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
shadowJar {

    mergeServiceFiles()
    transform(AppendingTransformer) {
        resource = 'reference.conf'
        shadowJar.classifier = ""
        zip64 true
        dependencies {
            include(dependency("com.databricks:spark-avro_2.11:4.0.0"))
            include(dependency("org.postgresql:postgresql:9.4.1207"))
            include(dependency("org.apache.hive:hive-jdbc:2.2.0"))
        }
    }
}