Como otros han señalado, para que un archivo jar sea ejecutable, el punto de entrada de la aplicación debe establecerse en el Main-Classatributo del archivo de manifiesto. Si los archivos de clase de dependencia no están colocados, entonces deben establecerse en la Class-Pathentrada del archivo de manifiesto.
He intentado todo tipo de combinaciones de complementos y, además de la simple tarea de crear un jar ejecutable y de alguna manera, incluir las dependencias. Parece que faltan todos los complementos de una forma u otra, pero finalmente lo obtuve como quería. Sin scripts misteriosos, ni un millón de mini archivos diferentes que contaminan el directorio de compilación, un archivo de scripts de compilación bastante limpio y, sobre todo: ni un millón de archivos de clases de terceros extranjeros fusionados en mi archivo jar.
Lo siguiente es copiar y pegar desde aquí para su conveniencia.
[Cómo hacer] crear un archivo zip de distribución con tarros de dependencias en el subdirectorio /liby agregar todas las dependencias a la Class-Pathentrada en el archivo de manifiesto:
apply plugin: 'java'
apply plugin: 'java-library-distribution'
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.commons:commons-lang3:3.3.2'
}
// Task "distZip" added by plugin "java-library-distribution":
distZip.shouldRunAfter(build)
jar {
// Keep jar clean:
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF'
manifest {
attributes 'Main-Class': 'com.somepackage.MainClass',
'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' ')
}
// How-to add class path:
// /programming/22659463/add-classpath-in-manifest-using-gradle
// https://gist.github.com/simon04/6865179
}
Alojado como una esencia aquí .
El resultado se puede encontrar en build/distributionsy el contenido descomprimido se ve así:
lib / commons-lang3-3.3.2.jar
MyJarFile.jar
Contenido de MyJarFile.jar#META-INF/MANIFEST.mf:
Versión de manifiesto: 1.0
Main-Class: com.somepackage.MainClass
Class-Path: lib / commons-lang3-3.3.2.jar