Gradle para ejecutar la clase Java (sin modificar la compilación.gradle)


Existe el complemento Eclipse simple para ejecutar Gradle, que solo usa la línea de comandos para iniciar gradle.

Qué es gradle analog para maven compilar y ejecutar mvn compile exec:java -Dexec.mainClass=example.Example

De esta manera cualquier proyecto con gradle.build podría ser ejecutado.

ACTUALIZACIÓN: Hubo una pregunta similar ¿Cuál es el equivalente de gradle del complemento exec de maven para ejecutar aplicaciones Java? preguntado antes, pero la solución sugirió alterar cada proyecto build.gradle

package runclass;

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

Luego ejecutar 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   
Author: Community, 2014-01-26

3 answers

Use JavaExec. Como ejemplo poner lo siguiente en build.gradle

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

Para ejecutar gradle -PmainClass=Boo execute. Usted consigue

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

mainClass es una propiedad que se pasa dinámicamente en la línea de comandos. classpath está configurado para recoger las últimas clases.

Si no pasa la propiedad mainClass, esto fallará como se esperaba.

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

ACTUALIZADO de los comentarios:

No hay mvn exec:java equivalente en gradle, necesitas aplicar el plugin de la aplicación o tener una tarea JavaExec.

 102
Author: First Zero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-26 07:55:52

Solo necesitas usar el complemento de la aplicación Gradle :

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

Y luego simplemente gradle run.

Como Teresa señala, también puede configurar mainClassName como una propiedad del sistema y ejecutar con un argumento de línea de comandos.

 109
Author: Vidya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-26 01:47:49

Expandiendo la respuesta de First Zero, supongo que quieres algo donde también puedas ejecutar gradle build sin errores.

Ambos gradle build y gradle -PmainClass=foo runApp trabajan con esto:

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

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

Donde establece su clase principal predeterminada.

 9
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-15 20:37:42