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