Soy un novato de Gradle. Quiero construir un uberjar (también conocido como fatjar) que incluya todas las dependencias transitivas del proyecto. ¿Qué líneas debo agregar a mi “build.gradle“?
Esto es lo que tengo actualmente: (Lo copié de algún lugar hace unos días, pero no recuerdo de dónde).
task uberjar(type: Jar) { from files(sourceSets.main.output.classesDir) manifest { attributes 'Implementation-Title': 'Foobar', 'Implementation-Version': version, 'Built-By': System.getProperty('user.name'), 'Built-Date': new Date(), 'Built-JDK': System.getProperty('java.version'), 'Main-Class': mainClassName } }
¿Has probado el ejemplo de Fatjar en el libro de cocina Gradle ?
Lo que estás buscando es el plugin shadow para gradle
task uberjar(..
la task uberjar(..
con lo siguiente:
jar { from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) { exclude "META-INF/*.SF" exclude "META-INF/*.DSA" exclude "META-INF/*.RSA" } manifest { attributes 'Implementation-Title': 'Foobar', 'Implementation-Version': version, 'Built-By': System.getProperty('user.name'), 'Built-Date': new Date(), 'Built-JDK': System.getProperty('java.version'), 'Main-Class': mainClassName } }
Las exclusiones son necesarias porque en su ausencia usted llegará a este problema.
Simplemente agregue esto a build.gradle de su módulo java.
mainClassName = “my.main.Class”
jar { manifest { attributes "Main-Class": "$mainClassName" } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } }
Esto dará como resultado el archivo [nombre_módulo] / build / libs / [nombre_módulo] .jar.
Encontré este proyecto muy útil. Utilicándolo como referencia, mi tarea de Gradle uberjar sería
task uberjar(type: Jar, dependsOn: [':compileJava', ':processResources']) { from files(sourceSets.main.output.classesDir) from configurations.runtime.asFileTree.files.collect { zipTree(it) } manifest { attributes 'Main-Class': 'SomeClass' } }