2013-10-01 32 views
11

我有<project_root>文件夾下,這些文件的一個主類:如何在一個罐子從gradle這個使用的Java「命令

./build.gradle 
./build/libs/vh-1.0-SNAPSHOT.jar 
./libs/groovy-all-2.1.7.jar 
./src/main/groovy/vh/Main.groovy 

build.gradle文件,我有這樣的任務:

task vh(type:Exec) { 
    commandLine 'java -cp libs/groovy-all-2.1.7.jar:build/libs/' + 
      project.name + '-' + version + '.jar vh.Main' 
} 

Main.groovy文件很簡單:

package vh 

class Main { 
    static void main(String[] args) { 
     println 'Hello, World!' 
    } 

} 

在字符串值後堵塞,命令行是:

java -cp libs/groovy-all-2.1.7.jar:build/libs/vh-1.0-SNAPSHOT.jar vh.Main 

如果我直接從shell運行命令,我得到正確的輸出。但是,如果我運行gradle vh,則會失敗。那麼,我該如何使它工作?非常感謝你。

回答

13

Exec.commandLine預計值列表值:可執行文件的一個值,以及每個參數的另一個值。要執行的Java代碼,最好使用JavaExec任務:

task vh(type: JavaExec) { 
    main = "vh.Main" 
    classpath = files("libs/groovy-all-2.1.7.jar", "build/libs/${project.name}-${version}.jar") 
} 

通常情況下,你就不必硬編碼這樣的類路徑。例如,如果您使用的是groovy插件,並groovy-all已經被聲明爲一個compile依賴(並且知道第二瓶從main源創建的),你寧願做:

classpath = sourceSets.main.runtimeClasspath 

要找出有關ExecJavaExec任務類型的更多信息,請參閱Gradle Build Language Reference

+0

非常感謝。你的解決方案比我的解決方案好得多。 – JBT

相關問題