Paul Verest Paul Verest - 7 months ago 82
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
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

package runclass;

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

Then executing
gradle run -DmainClass=runclass.RunClass


FAILURE: Build failed with an exception.

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


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
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
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.