Gradle:JavaExecの使い方
JavaExecは、特にjarファイルにまとめなくとも、ソースをコンパイルした状態で実行できる。
task something(type: JavaExec, dependsOn: ['classes']) {
main = "foo.bar.Something"
classpath = sourceSets.main.runtimeClasspath
}
などとする。
失敗の場合の調査の仕方
が、失敗した場合、以下の簡単なメッセージしか出ないことも多い。
* What went wrong:
Execution failed for task ':something'.
> Process 'command 'C:\Program Files\Java\jdk1.8.0_112\bin\java.exe'' finished with non-zero exit value 1
このような場合は、コマンドライン全体を表示させることができる。
task something(type: JavaExec, dependsOn: ['classes']) {
main = "foo.bar.Something"
classpath = sourceSets.main.runtimeClasspath
doFirst {
println commandLine
}
}
以下のような文字列が表示される。これは非常に長いものになるが、実際にjavaコマンドに与えられているものだ。
[C:\Program Files\Java\jdk1.8.0_112\bin\java.exe, -Dfile.encoding=UTF-8, -Duser.country=JP, -Duser.language=en, -Duser.variant, -cp, C:\foo\bar\classes;C:\Users\admin\.gradle\caches\modules-2\files-2.1\com.gwtcenter\admin\1.2\da074104a1004f4e2279d989f831cf77161772eb\admin-1.2.jar;.... C:\Users\admin\.gradle\caches\modules-2\files-2.1\org.codehaus.mojo\animal-sniffer-annotations\1.14\775b7e22fb10026eed3f86e8dc556dfafe35f2d5\animal-sniffer-annotations-1.14.jar, foo.bar.Main]
マニュアルは、JavaExecにある。
クラスパスを追加するには?
上の例では、classpathとしてsourceSets.main.runtimeClasspathが指定されているのだが、この意味がわからない。おそらくは、runtimeというconfigurationに含まれている依存と思われるのだが、しかし、それ以外の依存を入れたい場合にはどうしたら良いのだろうか?
まず上記の設定というのは以下と同一のようだ。
task something(type: JavaExec, dependsOn: ['classes']) {
main = "foo.bar.Something"
classpath = sourceSets.main.output + configurations.runtime
}
つまり、mainのソースから出力されたclasses+mainの依存ということになる。ここまでわかれば簡単だ。
例えば以下を記述し、
configurations {
extra
}
dependencies {
extra group: 'com.google.gwt', name: 'gwt-user', version: '2.8.2'
...
以下とすればよい。
task something(type: JavaExec, dependsOn: ['classes']) {
main = "foo.bar.Something"
classpath = sourceSets.main.output + configurations.runtime + configurations.extra
}