Saltar al contenido

Gradle para ejecutar la clase Java (sin modificar build.gradle)

Siéntete en la libertad de compartir nuestro espacio y códigos con otro, necesitamos de tu ayuda para hacer crecer nuestra comunidad.

Solución:

No hay equivalente directo a mvn exec:java en gradle, debe aplicar el application complemento o tener un JavaExec tarea.

application enchufar

Activa el complemento:

plugins 
    id 'application'
    ...

Configúralo de la siguiente manera:

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

En la línea de comando, escriba

$ gradle -PmainClass=Boo run

JavaExec tarea

Definir una tarea, digamos execute:

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

Para correr, escribe gradle -PmainClass=Boo execute. Usted obtiene

$ 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 comando. classpath está configurado para recoger las últimas clases.


Si no pasas en el mainClass propiedad, ambos enfoques fallan 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'.

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

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

Y luego simplemente gradle run.

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

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

Ambas cosas gradle build y gradle -PmainClass=foo runApp trabajar 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.

Nos encantaría que puedieras dar recomendación a este artículo si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *