これが私にとってうまくいったことです..次の要件を備えたgradleを使用してhelloworldjavaアプリケーションを作成したいと思いました。
- アプリケーションには外部jar依存関係があります
- すべての依存クラスがjarにコピーされた実行可能なfatjarを作成します
- すべての依存ライブラリをディレクトリ「dependencies」にコピーして実行可能なjarを作成し、マニフェストにクラスパスを追加します。
これが解決策です:
- 最新のgradleをインストールします(gradle --versionを確認してください。gradle6.6.1を使用しました)
- フォルダを作成してターミナルを開きます
- 実行する
gradle init --type java-application
- コマンドラインに必要なデータを追加します
- プロジェクトをIDE(IntelliJまたはEclipse)にインポートします
- 次のタスクでbuild.gradleファイルを編集します。
実行可能なファットジャー
task fatJar(type: Jar) {
clean
println("Creating fat jar")
manifest {
attributes 'Main-Class': 'com.abc.gradle.hello.App'
}
archiveName "${runnableJar}"
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
} with jar
println("Fat jar is created")
}
依存関係をコピーする
task copyDepends(type: Copy) {
from configurations.default
into "${dependsDir}"
}
マニフェストにクラスパス依存関係を持つjarを作成する
task createJar(type: Jar) {
println("Cleaning...")
clean
manifest {
attributes('Main-Class': 'com.abc.gradle.hello.App',
'Class-Path': configurations.default.collect { 'dependencies/' +
it.getName() }.join(' ')
)
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
} with jar
println "${outputJar} created"
}
これが完全なbuild.gradleです
plugins {
id 'java'
id 'application'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.slf4j:slf4j-api:1.7.30'
implementation 'ch.qos.logback:logback-classic:1.2.3'
implementation 'ch.qos.logback:logback-core:1.2.3'
testImplementation 'junit:junit:4.13'
}
def outputJar = "${buildDir}/libs/${rootProject.name}.jar"
def dependsDir = "${buildDir}/libs/dependencies/"
def runnableJar = "${rootProject.name}_fat.jar";
//Create runnable fat jar
task fatJar(type: Jar) {
clean
println("Creating fat jar")
manifest {
attributes 'Main-Class': 'com.abc.gradle.hello.App'
}
archiveName "${runnableJar}"
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
} with jar
println("Fat jar is created")
}
//Copy dependent libraries to directory.
task copyDepends(type: Copy) {
from configurations.default
into "${dependsDir}"
}
//Create runnable jar with dependencies
task createJar(type: Jar) {
println("Cleaning...")
clean
manifest {
attributes('Main-Class': 'com.abc.gradle.hello.App',
'Class-Path': configurations.default.collect { 'dependencies/' +
it.getName() }.join(' ')
)
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
} with jar
println "${outputJar} created"
}
Gradleビルドコマンド
ファットjarの作成:依存関係のgradle fatJar
コピー:依存gradle copyDepends
関係のある実行可能なjarの作成:gradle createJar
詳細については、こちらをご覧ください:https ://jafarmlp.medium.com/a-simple-java-project-with-gradle-2c323ae0e43d