2012-07-19 54 views
1

我有一個使用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) 
    } 
} 
+0

你見過[Gradle食譜中的fatjar部分](http://docs.codehaus.org/display/GRADLE/Cookbook#Cookbook-Creatingafatjar)嗎? – 2012-07-19 12:55:30

+0

是的,這是我第一次提到的線條。實際上,我似乎真的得到了一個JAR,它有很多依賴關係,但可能不是全部? – Andrea 2012-07-19 13:06:33

回答

1

聽起來就像是錯誤的ASM版本被包括在內,雖然我不知道爲什麼。無論如何,使用groovy-all而不是groovy通常更簡單和更安全,它也應該解決這個問題。

您不應該使用Groovy 1.8.0,而應該使用最新的次要版本(1.8.6)。

+0

按照你的建議,我得到'在線程中的異常「主」java.lang.NoSuchMethodError:org.codehaus.groovy.runtime.GroovyCategorySupport.getCategoryNameUsage(Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicInteger;在org.codehaus.groovy.runtime.callsite.AbstractCallSite。 (AbstractCallSite.java:46) \t at org.codehaus.groovy.runtime.callsite.CallSiteArray。 (CallSiteArray.java:35) ' – Andrea 2012-07-19 13:23:37

+0

首先,從'groovy'配置中除去'groovy-all'的所有內容。你有沒有檢查'groovy-xmlrpc'是否與Groovy 1.8兼容?我會嘗試使用最新版本(0.8)。 – 2012-07-19 13:33:28

+0

我刪除了其他groovy條目(commons-cli),但沒有任何區別。我當然希望'groovy-xmlrpc'是兼容的,因爲我可以正確地測試和運行應用程序!我唯一不能做的就是部署一個jar。 – Andrea 2012-07-19 13:36:28

相關問題