我有一個使用Gradle構建的Groovy應用程序。我可以使用gradle run
正確運行它,但我想創建一個胖JAR以使部署更容易。我已添加說明Gradle - 爲Groovy應用程序創建一個胖JAR
jar {
dependsOn configurations.runtime
from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } }
}
我的build.gradle
。
看來,包括很多dependencied的JAR生成,但是當我嘗試使用java -jar myproject.jar
運行它,我得到的錯誤
Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
at groovy.lang.MetaClassImpl.loadReflector(MetaClassImpl.java:1652)
at groovy.lang.MetaClassImpl.generateReflector(MetaClassImpl.java:1615)
at groovy.lang.MetaClassImpl.checkInitialised(MetaClassImpl.java:1532)
at groovy.lang.MetaClassRegistry.getMetaClass(MetaClassRegistry.java:140)
at groovy.lang.MetaClassImpl.addNewStaticMethodsFrom(MetaClassImpl.java:1300)
at groovy.lang.MetaClassImpl.addInheritedMethods(MetaClassImpl.java:201)
at groovy.lang.MetaClassImpl.checkInitialised(MetaClassImpl.java:1529)
at groovy.lang.MetaClassRegistry.checkInitialised(MetaClassRegistry.java:201)
at groovy.lang.MetaClassRegistry.<init>(MetaClassRegistry.java:113)
at groovy.lang.MetaClassRegistry.<init>(MetaClassRegistry.java:89)
at org.codehaus.groovy.runtime.Invoker.<init>(Invoker.java:102)
at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:80)
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToBoolean(DefaultTypeTransformation.java:156)
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.booleanUnbox(DefaultTypeTransformation.java:65)
at mycompany.myproject.Main.main(Main.groovy:6)
更多細節,如果他們能幫助
作爲參考,這裏是滿build.gradle
:
apply plugin: 'groovy'
project.group = 'mycompany.myproject'
archivesBaseName = 'myproject'
project.version = '0.1'
manifest.mainAttributes('Main-Class' : 'mycompany.myproject.Main')
apply plugin: 'application'
mainClassName = 'mycompany.myproject.Main'
repositories {
mavenCentral()
}
buildscript {
apply from: 'https://github.com/valkolovos/gradle_cobertura/raw/master/repo/gradle_cobertura/gradle_cobertura/1.2/coberturainit.gradle'
}
jar {
dependsOn configurations.runtime
from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } }
}
dependencies {
groovy group: 'commons-cli', name: 'commons-cli', version: '1.0'
groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.0'
compile group: 'log4j', name: 'log4j', version: '1.2.9'
compile group: 'org.codehaus.groovy.modules.http-builder', name: 'http-builder', version: '0.5.2'
compile group: 'groovy', name: 'groovy-xmlrpc', version: '0.3'
testCompile group: 'junit', name: 'junit', version: '4.0'
}
run {
if (project.hasProperty('args')) {
args project.args.split('\\s+')
}
}
cobertura {
coverageSourceDirs = sourceSets.main.java.srcDirs + sourceSets.main.groovy.srcDirs
}
的的源極類,這裏的錯誤似乎存在,是
package mycompany.myproject
class Main {
static main(args) {
def env = args ? args[0] : 'prod'
new Coordinator().run(env)
}
}
你見過[Gradle食譜中的fatjar部分](http://docs.codehaus.org/display/GRADLE/Cookbook#Cookbook-Creatingafatjar)嗎? – 2012-07-19 12:55:30
是的,這是我第一次提到的線條。實際上,我似乎真的得到了一個JAR,它有很多依賴關係,但可能不是全部? – Andrea 2012-07-19 13:06:33