настройте задачу gradle jar, чтобы создать неработающий fat jar

#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