web-dev-qa-db-fra.com

Gradient pour exécuter la classe Java (sans modifier build.gradle)

Il y a simple plugin Eclipse pour exécuter Gradle, il suffit d’utiliser la méthode de la ligne de commande pour lancer gradle.

Qu'est-ce que gradle analog pour maven compiler et exécuter mvn compile exec:Java -Dexec.mainClass=example.Example

De cette façon, tout projet avec gradle.build pourrait être exécuté.

MISE À JOUR: Il y avait une question similaire Quel est l'équivalent du plugin exec de maven pour l'exécution de Java applications? demandé auparavant, mais la solution suggéra de modifier chaque projet build.gradle

package runclass;

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

Puis en exécutant 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   
109
Paul Verest

Utilisez JavaExec. Par exemple, insérez ce qui suit dans build.gradle

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

Pour exécuter gradle -PmainClass=Boo execute. Vous obtenez

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

mainClass est une propriété passée dynamiquement en ligne de commande. classpath est configuré pour récupérer les dernières classes.

Si vous ne transmettez pas la propriété mainClass, cela échoue comme prévu.

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

MISE À JOUR à partir de commentaires:

Il n'y a pas d'équivalent mvn exec:Java dans Gradle, vous devez appliquer le plug-in d'application ou créer une tâche JavaExec.

122
First Zero

Vous devez juste utiliser le plugin Gradle Application :

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

Et puis simplement gradle run.

Comme le souligne Teresa, vous pouvez également configurer mainClassName en tant que propriété système et l'exécuter avec un argument de ligne de commande.

133
Vidya

En développant la réponse de First Zero, je suppose que vous voulez quelque chose où vous pouvez aussi exécuter gradle build sans erreur.

gradle build et gradle -PmainClass=foo runApp fonctionnent tous les deux avec ceci:

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

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

où vous définissez votre classe principale par défaut.

18
Matt