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-Class
atributo del archivo de manifiesto. Si los archivos de clase de dependencia no están colocados, entonces deben establecerse en la Class-Path
entrada 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 /lib
y agregar todas las dependencias a la Class-Path
entrada 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/distributions
y 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