42

プロジェクトのすべての推移的な依存関係を含む 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
    }
}
4

4 に答える 4

41

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
    }
}

除外がないとこの問題が発生するため、除外が必要です。

于 2012-06-11T20:05:21.000 に答える
37

gradle cookbookで fatjar の例を試しましたか?

あなたが探しているのは、 gradleのシャドウ プラグインです。

于 2012-06-11T19:29:46.717 に答える
5

このプロジェクトはとても役に立ちました。それを参考にすると、私の Gradle uberjar タスクは次のようになります。

task uberjar(type: Jar, dependsOn: [':compileJava', ':processResources']) {
    from files(sourceSets.main.output.classesDir)
    from configurations.runtime.asFileTree.files.collect { zipTree(it) }

    manifest {
        attributes 'Main-Class': 'SomeClass'
    }
}
于 2014-09-24T16:34:19.123 に答える