Gradle to execute Java class (without modifying build.gradle) Ask Question

Gradle to execute Java class (without modifying build.gradle) Ask Question

There is simple Eclipse plugin to run Gradle, that just uses command line way to launch gradle.

What is gradle analog for maven compile and run mvn compile exec:java -Dexec.mainClass=example.Example

This way any project with gradle.build could be run.

UPDATE: There was similar question What is the gradle equivalent of maven's exec plugin for running Java apps? asked before, but solution suggested altering every project 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   

ベストアンサー1

mvn exec:javaGradleには直接相当するものがないので、applicationプラグインを適用するか、タスクを用意する必要がありますJavaExec

applicationプラグイン

プラグインを有効にします:

plugins {
    id 'application'
    ...
}

次のように設定します。

application {
    mainClassName = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "NULL"
}

コマンドラインで次のように記述します。

$ gradle -PmainClass=Boo run

JavaExecタスク

executeタスクを定義します。たとえば、

task execute(type:JavaExec) {
   main = project.hasProperty("mainClass") ? getProperty("mainClass") : "NULL"
   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'.

おすすめ記事