#java #gradle #jar #executable-jar
#java #gradle #jar #исполняемый файл-jar
Вопрос:
Я пишу java-проект, который использует gradle в качестве инструмента сборки. (gradle 7.2 jdk 17).
Я хочу создать fat jar для этого проекта.
Я подготовил пример репозитория по адресу: https://github.com/hyc125/demo-fat-jar .
Сценарий сборки содержит две задачи:
- jar
- pkgJar
когда я выполняю jar
задачу, fat jar работает нормально
./gradlew jar
java -jar demo.jar
но fat jar, созданный pkgJar
./gradlew pkgJar
java -jar demo.jar
выбросить Error: Could not find or load main class com.eason.Main
Можно сгенерировать исполняемый файл fat JAR из задачи pkgJar?
сценарий сборки
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
}
jar{
archiveFileName = 'demo.jar'
manifest { attributes('Main-Class': 'com.eason.Main') }
duplicatesStrategy = 'EXCLUDE'
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
} {
exclude(["META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA"])
}
}
task pkgJar(type: Jar){
dependsOn("classes")
archiveFileName = 'demo.jar'
manifest { attributes('Main-Class': 'com.eason.Main') }
duplicatesStrategy = 'EXCLUDE'
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
} {
exclude(["META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA"])
}
}
group 'com.eason'
version '1.0-SNAPSHOT'
java.sourceCompatibility = JavaVersion.VERSION_17