与 Gradle 一起构建一个超级容器

2022-09-01 01:53:53

我想构建一个包含项目所有传递依赖项的 uberjar(AKA fatjar)。我需要添加哪些行?build.gradle

这是我目前拥有的:

task uberjar(type: Jar) {
    from files(sourceSets.main.output.classesDir)

    manifest {
        attributes 'Implementation-Title': 'Foobar',
                'Implementation-Version': version,
                'Built-By': System.getProperty('user.name'),
                'Built-Date': new Date(),
                'Built-JDK': System.getProperty('java.version'),
                'Main-Class': mainClassName
    }
}

答案 1

我用以下内容替换了:task uberjar(..

jar {
    from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }

    manifest {
        attributes 'Implementation-Title': 'Foobar',
                'Implementation-Version': version,
                'Built-By': System.getProperty('user.name'),
                'Built-Date': new Date(),
                'Built-JDK': System.getProperty('java.version'),
                'Main-Class': mainClassName
    }
}

排除是必需的,因为如果没有它们,您将遇到此问题


答案 2

你有没有尝试过gradle食谱中的fatjar示例?

你正在寻找的是用于gradle的阴影插件


推荐