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

Il y a simple plugin Eclipse pour exécuter Gradle, qui utilise uniquement en ligne de commande pour lancer gradle.

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

de cette façon n'importe quel projet avec gradle.build pourrait être exécuté.

mise à jour: il y avait une question similaire Quel est l'équivalent grad de Maven exec plugin pour exécuter des applications Java? demandé avant, mais solution proposé de modifier chaque projet build.gradle

package runclass;

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

puis l'exécution 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   
90
demandé sur Community 2014-01-26 05:21:06

3 réponses

utiliser JavaExec . À titre d'exemple, mettez ce qui suit dans build.gradle

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

pour 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é transmise dynamiquement en ligne de commande. classpath est réglé pour récupérer les dernières classes.

si vous ne passez pas dans la propriété mainClass , cela ne fonctionne pas 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'.

mis à jour à partir des commentaires:

il n'y a pas d'équivalent mvn exec:java dans gradle, vous devez soit appliquer le plugin d'application ou avoir une tâche JavaExec.

102
répondu First Zero 2014-01-26 07:55:52

vous avez juste besoin d'utiliser le application Gradle plugin :

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

et tout simplement gradle run .

comme Teresa le souligne, vous pouvez également configurer mainClassName comme propriété du système et exécuter avec un argument de ligne de commande.

109
répondu Vidya 2014-01-26 01:47:49

en prolongeant la réponse de First Zero, je suppose que vous voulez quelque chose où vous pouvez aussi exécuter gradle build sans erreurs.

à la fois gradle build et gradle -PmainClass=foo runApp travailler 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.

9
répondu Matt 2017-02-15 20:37:42