install groovy windows
Crea un JAR ejecutable Groovy con Gradle (3)
Este es mi script de construcción gradle.
apply plugin: ''groovy''
project.group = "test.tree"
archivesBaseName = "tree"
project.version = "1.0"
manifest.mainAttributes("Main-Class" : "test.tree.App")
sourceCompatibility=1.6
targetCompatibility=1.6
repositories {
mavenCentral()
}
dependencies {
groovy group: ''org.codehaus.groovy'', name: ''groovy'', version: ''1.8.6''
testCompile group: ''junit'', name: ''junit'', version: ''4.8.2''
}
Y esto compila muy bien
El problema es que no puedo ejecutar el JAR creado, obtengo una excepción java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
Así que supongo que el plugin groovy no incluye todas las clases necesarias dentro del JAR.
Cómo crear un JAR autónomo que pueda simplemente ... ejecutar ;-)
Lo que está buscando es el complemento de la aplicación que le permite crear una aplicación JVM independiente que incluya todas las dependencias y ejecute scripts.
apply plugin:''application''
mainClassName = ''test.tree.App''
EDITAR:
Esto debería crear el uberjar que quieras:
task uberjar(type: Jar) {
from files(sourceSets.main.output.classesDir)
from configurations.runtime.asFileTree.files.collect { zipTree(it) }
manifest {
attributes ''Main-Class'': ''test.tree.App''
}
}
Lanzaría un voto para el plugin shadow gradle . Es capaz de construir jarrones súper y es bastante versátil y capaz de cosas como la reubicación de clases para evitar el infierno de la dependencia .
No voy a entrar en la comparación de los dos complementos, pero llegaré a decir que me he inclinado por el uso de la sombra por haber usado aplicaciones en el pasado debido a las características adicionales.
Cuando me canso de los tiempos de inicio de los guiones groovy basados en @Grab, tiendo a escribir un archivo de compilación de gradle usando el plugin de sombras incluso para guiones genéricos de archivos únicos. Un ejemplo de archivo de compilación gradle capaz de construir un archivo uber de un archivo de script groovy en el directorio actual. El nombre de la clase principal debe corresponderse con el nombre del archivo de script:
repositories {
jcenter()
mavenCentral()
}
defaultTasks = [''shadowJar'']
version = "1.0"
dependencies {
compile "org.codehaus.groovy:groovy:2.4.7",
"commons-cli:commons-cli:1.2"
}
sourceSets {
main {
groovy {
srcDirs = [rootDir]
}
}
}
project.tasks.remove jar
shadowJar {
manifest {
attributes ''Main-Class'': ''MyGroovyScriptName''
}
classifier = ""
}
el jar de uber se generará en el directorio build/libs
.
el siguiente código también está bien , use el plugin spring boot
buildscript {
ext {
springBootVersion = ''1.2.6.RELEASE''
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: ''groovy''
apply plugin: ''eclipse''
apply plugin: ''spring-boot''
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
sourceSets {
main {
groovy {
srcDirs = [''src'']
}
}
/*test {
groovy {
srcDirs = [''test/groovy'']
}
}*/
}
dependencies {
compile "com.alibaba:fastjson:1.1.34"
compile ''org.codehaus.groovy:groovy-all:2.4.5''
//testCompile group: ''junit'', name: ''junit'', version: ''4.8.2''
}
springBoot {
backupSource = false
mainClass = "com.zhb.hello.Hello"
}
jar{
baseName = ''hellogroovy''
version = ''1.1.0''
}