どう

2013-10-01 3 views
11

のJava 'コマンドを使用してのGradleから瓶にメインクラスを実行するために、私は<project_root>フォルダの下にこれらのファイルを持っている:build.gradleファイルでどう

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

、私はこの仕事を持っている:

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 

シェルから直接コマンドを実行すると、正しい出力が得られます。しかし、gradle vhを実行すると、失敗します。では、どうやってそれを動作させるのですか?どうもありがとうございました。

答えて

13

Exec.commandLineは、リストの値を期待しています。実行可能ファイルの値は1つで、各引数の値は1つです。 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