web-dev-qa-db-ja.com

gradle.buildでfatjarプラグインを使用するときにメインクラスを指定する方法

Java -jar myApp.jarで実行できる単一の実行可能jarファイルに、すべてのモジュール依存関係と外部jarを含む単一のjarを構築することに興味があります。

モジュールBに依存するモジュールAがあります。現在gradleを使用しており、build.gradlescriptは次のようになります。

    apply plugin: 'fatjar'
    description = "A_Project"
    dependencies {
      compile project(':B_Project')
      compile "com.someExternalDependency::3.0"
    }

Gradleコマンドでビルドすると:clean build fatjar fat jar'A.jar 'が期待どおりに作成されます。しかし、上記のように実行すると、次のようになります。no main manifest attribute, in A.jarbuild.gradleファイルを変更して、メインクラスまたはマニフェストを指定するにはどうすればよいですか?

13
Ella Nikolic

私はそれを自分で理解しました:uberjarGradleタスクを使用しました。これで、build.gradleファイルは次のようになります。

apply plugin: 'Java'
apply plugin: 'application'

mainClassName  = 'com.organization.project.package.mainClassName'

version = '1.0'

task uberjar(type: Jar) {
    from files(sourceSets.main.output.classesDir)
    from {configurations.compile.collect {zipTree(it)}} {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
}

manifest {
    attributes 'Main-Class': 'com.organization.project.package.mainClassName'
    }
}


dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}

そして今、私はそれをコマンドで使用します:

クリーンビルドuberjar

そしてそれは1つの素敵な実行可能なjarを構築します:)

16
Ella Nikolic

Fatjarを使用して機能させるために、fatJarタスクにマニフェストセクションを追加しました。

task fatJar(type: Jar) {
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
        attributes 'Main-Class': 'com.organization.project.package.mainClassName'
    }
}
5
Damien