如何uberjar SPECIFIC依赖项?

时间:2018-10-12 13:42:25

标签: gradle uberjar

uberjar的典型答案是以下代码:

项目的build.gradle

manifest {
    attributes("Main-Class": "main.Main" )
}
jar{

    //<editor-fold defaultstate="collapsed" desc="uberjar">
//uberjar start
    from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }
//uberjar end
    //</editor-fold>
}

根据我的观察,这可以通过将所有jar放入maven local来实现。

如何仅使它成为依赖项,或者仅使我选择的依赖项成为uberjar?

1 个答案:

答案 0 :(得分:1)

您可以使用“包含”或“排除”配置(或在需要时同时使用两者)来指定要在uberjar中使用的软件包。

示例:

task customJar(type: Jar) {
   .....
   exclude('com/somePack/excludePack1/**') 
   exclude('com/somePack/excludePack2/**') 

   include('com/somePack/**')

    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}
// this example will include only packages with com/somePack/
// since exclude configuration specifies com/somePack/excludePack1/ and 
// com/somePack/excludePack2/ packages to be excluded. 
// any other packages under com/somePack/ will be included in the jar.

如果使用include,它将仅包含与包含定义匹配的软件包。

如果使用exclude,它将不包含任何数学运算排除定义的软件包。

您可以选择排除自己的源代码,如下所示。我建议创建一个自定义的jar任务,并为这种事情执行该任务。 (例如:gradle yourJarTaskName)