2016-11-06 64 views
1

我想編譯(用gradle)並執行(用java 1.8運行時)一個小的groovy程序(請參閱helloWorld.groovy ,下面)。不能運行一個jar文件,由groovy-code編譯用gradle構建

但是,當我嘗試調用它,我得到錯誤:無法找到或加載主類的helloWorld

我缺少什麼?


編譯:

lexu> gradle clean jar 
:clean 
:compileJava UP-TO-DATE 
:compileGroovy UP-TO-DATE 
:processResources UP-TO-DATE 
:classes UP-TO-DATE 
:jar 

BUILD SUCCESSFUL 

Total time: 0.555 secs 

執行:

lexu> java -jar ./build/libs/helloWorld.jar 
Error: Could not find or load main class helloWorld 

helloWorld.groovy:

class helloWorld {  
    static void main(String[] args) { 
     println('Hello World'); 
    } 
} 

的build.gradle:

apply plugin: 'groovy' 
apply plugin: 'application' 
mainClassName = "helloWorld" 
archivesBaseName = 'helloWorld'; 
configurations {provided; inlib;} 
repositories {mavenCentral()} 
dependencies {compile 'org.codehaus.groovy:groovy-all:2.4.7'} 
jar { 
    manifest { 
    attributes(
     'Class-Path': configurations.compile.collect { it.getName() }.join(' '), 
     'Main-Class': 'helloWorld' 
    ) 
    } 
} 

回答

1

沒有與您設置了幾個問題。

  1. 不破,但這裏值得一提:Convention指出您的文件名和類應該全部是大寫:HelloWorld.groovy

  2. gradle假設你的源文件是下src/main/java或在這種情況下,src/main/groovy 。您可以根據自己的喜好與gradle groovy plugin - project layout配置它:


sourceSets { 
    main { 
     groovy { 
      srcDirs = ['src/groovy'] 
     } 
    } 
} 

  • 您需要包括在你的JAR歸檔groovy所有運行時依賴。爲此,讓我們使用稱爲uberjar的擴展任務。

  • 的build.gradle

    apply plugin: 'groovy' 
    apply plugin: 'application' 
    mainClassName = "HelloWorld" 
    archivesBaseName = 'HelloWorld'; 
    configurations {provided; inlib;} 
    repositories {mavenCentral()} 
    dependencies {compile 'org.codehaus.groovy:groovy-all:2.4.7'} 
    
    task uberjar(type: Jar,dependsOn:[':compileJava',':compileGroovy']) { 
        from files(sourceSets.main.output.classesDir) 
        from configurations.runtime.asFileTree.files.collect { zipTree(it) } 
    
        manifest { 
         attributes 'Main-Class': mainClassName 
        } 
    } 
    

    HelloWorld.groovy

    class HelloWorld { 
        static void main(String[] args) { 
         println('Hello World'); 
        } 
    } 
    
    +1

    THANK YOU! (2)解決了我的問題,我創建了subdirs並移動了源文件。(1)是我會遵循的好建議(3),因爲groovy-jar在我的classpath中! (但後來我沒有提到) – lexu

    相關問題