javagradleexecution

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   

Solution

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

    application plugin

    Activate the plugin:

    plugins {
        id 'application'
        ...
    }
    

    Configure it as follows:

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

    On the command line, write

    $ gradle -PmainClass=Boo run
    

    JavaExec task

    Define a task, let's say execute:

    task execute(type:JavaExec) {
       main = project.hasProperty("mainClass") ? getProperty("mainClass") : "NULL"
       classpath = sourceSets.main.runtimeClasspath
    }
    

    To run, write 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, both of the approaches fail 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'.