Создайте исполняемый файл JAR Groovy с Gradle - PullRequest
38 голосов
/ 17 марта 2012

Это мой скрипт сборки 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'
}

И он прекрасно компилируется

Проблема в том, что я не могу запустить созданный JAR, я получаю исключение java.lang.NoClassDefFoundError: groovy/lang/GroovyObject

Так что я полагаю, что плагин groovy не включает в себя все необходимые классы внутри JAR.

Как создать автономный JAR, который я могу просто .. запустить; -)

Ответы [ 3 ]

48 голосов
/ 17 марта 2012

Требуется плагин для приложения , который позволяет создавать автономное приложение JVM, включая все зависимости и сценарии запуска.

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

РЕДАКТИРОВАТЬ:

Это должно создать нужный вам uberjar:

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'
    }
}
1 голос
/ 03 февраля 2017

Я бы проголосовал за плагин теневого градла . Он способен создавать Uber JAR-файлы, он достаточно универсален и способен на такие вещи, как перемещение классов, чтобы предотвратить ад зависимости .

Я не стану сравнивать два плагина, но пойду до того, что скажу, что я склонялся к использованию тени из-за того, что использовал приложение в прошлом из-за добавленных функций.

Когда я устаю от времени запуска сценариев Groovy на основе @Grab, я склонен писать файл сборки gradle, используя плагин shadow, даже для сценариев groovy с одним файлом. Пример файла сборки Gradle, способного собрать Uber JAR из файла groovy 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 = ""
}

Uber JAR будет сгенерирован в каталоге build/libs.

0 голосов
/ 04 декабря 2016

следующий код также в порядке , используйте плагин весенней загрузки

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'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...