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中来实现。

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

最佳答案

您可以使用include或exclude配置(或两种配置都可以满足您的需要)来指定要在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)

关于gradle - 如何uberjar SPECIFIC依赖项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52780827/

10-11 22:15