Paul Verest Paul Verest - 3 months ago 34
Java Question

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

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!");
}
}


Then executing
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

Answer

Use JavaExec. As an example put the following in build.gradle

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

To run gradle -PmainClass=Boo execute. You get

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

mainClass is a property passed in dynamically at command line. classpath is set to pickup the latest classes.

If you do not pass in the mainClass property, this fails as expected.

$ 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'.

UPDATED from comments:

There is no mvn exec:java equivalent in gradle, you need to either apply the application plugin or have a JavaExec task.