web-dev-qa-db-ja.com

Javaクラスを実行するGradle(build.gradleを変更せずに)

Gradleを実行するための シンプルなEclipseプラグイン があり、コマンドラインでgradleを起動するだけです。

Mavenのコンパイルと実行のためのgradle analogとは何ですかmvn compile exec:Java -Dexec.mainClass=example.Example

これにより、gradle.buildを含むプロジェクトを実行できます。

更新:同様の質問がありました Javaアプリを実行するためのmavenのexecプラグインに相当するgradleは何ですか? 前に尋ねましたが、ソリューションはすべてのプロジェクトを変更することを提案しましたbuild.gradle

package runclass;

public class RunClass {
    public static void main(String[] args) {
        System.out.println("app is running!");
    }
}

その後、gradle run -DmainClass=runclass.RunClassを実行します

:run FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':run'.
> No main class specified   
106
Paul Verest

JavaExecを使用します。例として、以下をbuild.gradleに入れます

task execute(type:JavaExec) {
   main = mainClass
   classpath = sourceSets.main.runtimeClasspath
}

gradle -PmainClass=Boo executeを実行するには。あなたが得る

$ gradle -PmainClass=Boo execute
:compileJava
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes
:execute
I am BOO!

mainClassは、コマンドラインで動的に渡されるプロパティです。 classpathは、最新のクラスをピックアップするように設定されています。

mainClassプロパティを渡さないと、期待どおりに失敗します。

$ gradle execute

FAILURE: Build failed with an exception.

* Where:
Build file 'xxxx/build.gradle' line: 4

* What went wrong:
A problem occurred evaluating root project 'Foo'.
> Could not find property 'mainClass' on task ':execute'.

コメントから更新:

Gradleにはmvn exec:Javaに相当するものはありません。アプリケーションプラグインを適用するか、JavaExecタスクが必要です。

121
First Zero

Gradle Applicationプラグイン を使用するだけです。

apply plugin:'application'
mainClassName = "org.gradle.sample.Main"

そして、単にgradle run

Teresaが指摘しているように、mainClassNameをシステムプロパティとして構成し、コマンドライン引数で実行することもできます。

130
Vidya

First Zeroの答えを拡張すると、エラーなしでgradle buildも実行できるものが必要だと思います。

gradle buildgradle -PmainClass=foo runAppの両方がこれで動作します:

task runApp(type:JavaExec) {
    classpath = sourceSets.main.runtimeClasspath

    main = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "package.MyDefaultMain"
}

デフォルトのメインクラスを設定します。

17
Matt