Utwórz plik wykonywalny Groovy za pomocą Gradle

To mój skrypt gradle build.

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'
}

And this compiles just fine

Problem polega na tym, że nie mogę uruchomić utworzonego Jara, dostaję wyjątek java.lang.NoClassDefFoundError: groovy/lang/GroovyObject

Więc domyślam się, że wtyczka groovy nie zawiera wszystkich niezbędnych klas wewnątrz słoika.

Jak stworzyć samodzielny słoik, który mogę po prostu .. run; -)

Author: emesx, 2012-03-17

3 answers

To, czego szukasz, to wtyczka application , która pozwala zbudować samodzielną aplikację JVM zawierającą wszystkie zależności i uruchamiane Skrypty.

apply plugin:'application'
mainClassName = 'test.tree.App'

EDIT:

To powinno utworzyć uberjar, który chcesz:

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'
    }
}
 47
Author: Benjamin Muschko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-18 15:42:45

Poniższy kod jest również ok, Użyj wtyczki 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'
}
 1
Author: Edward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-04 01:52:38

Dorzuciłbym głos na wtyczkę shadow gradle . Jest w stanie budować słoiki Ubera i jest dość wszechstronny i zdolny do rzeczy takich jak przenoszenie klas, aby zapobiec piekłu zależności {4]}.

Nie będę się wdawać w porównywanie dwóch wtyczek, ale posunę się tak daleko, że powiem, że mam grawitacji w kierunku korzystania z shadow od korzystania z aplikacji w przeszłości ze względu na dodane funkcje.

Kiedy zmęczy mnie czas uruchamiania skryptów groovy opartych na @ Grab, Mam tendencję do pisania pliku Gradle budować za pomocą wtyczki shadow nawet dla pojedynczych plików GROOVY skryptów. Przykładowy plik gradle build umożliwiający zbudowanie uber jar pliku skryptu groovy w bieżącym katalogu. Główna nazwa klasy musi odpowiadać nazwie pliku skryptu:

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 = ""
}

Uber jar zostanie wygenerowany w katalogu build/libs.

 0
Author: Matias Bjarland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-03 19:42:42