使用具有传递依赖项的gradle来打包胖罐子

时间:2018-07-29 12:10:16

标签: gradle

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

我面临的问题是我无法找到一种方法来指示插件将某些库及其传递依赖项打包在一起。

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

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

我正在使用此构建文件来打包用于spark-submmit的jar,该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"))
        }
    }
}

0 个答案:

没有答案