Java -jar myApp.jar
で実行できる単一の実行可能jarファイルに、すべてのモジュール依存関係と外部jarを含む単一のjarを構築することに興味があります。
モジュールBに依存するモジュールAがあります。現在gradleを使用しており、build.gradle
scriptは次のようになります。
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.jar
build.gradle
ファイルを変更して、メインクラスまたはマニフェストを指定するにはどうすればよいですか?
私はそれを自分で理解しました: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を構築します:)
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'
}
}