web-dev-qa-db-ja.com

Gradleでuberjarを構築する

私はGradle初心者です。プロジェクトのすべての推移的な依存関係を含むuberjar(別名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
    }
}
35
missingfaktor

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

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

32
tim_yates

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

除外がないと、 this issueがヒットするため、除外が必要です。

39
missingfaktor

これをJavaモジュールのbuild.gradleに追加するだけです。

mainClassName = "my.main.Class"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

これにより、[module_name]/build/libs/[module_name] .jarファイルが作成されます。

7
Bao Le

私はこれを見つけました project 非常に便利です。それを参照として使用すると、私の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'
    }
}
5
boechat107