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/