Es gibt ein einfaches Eclipse-Plugin zum Ausführen von Gradle, das nur die Befehlszeilenmethode zum Starten von Gradle verwendet.
Was ist Gradle Analog für Maven kompilieren und ausführen
mvn compile exec:java -Dexec.mainClass=example.Example
Auf diese Weise kann jedes Projekt mit ausgeführt gradle.build
werden.
UPDATE: Es gab eine ähnliche Frage. Was ist das Gradle-Äquivalent des Exec-Plugins von maven zum Ausführen von Java-Apps? vorher gefragt, aber die Lösung schlug vor, jedes Projekt zu ändernbuild.gradle
package runclass;
public class RunClass {
public static void main(String[] args) {
System.out.println("app is running!");
}
}
Dann ausführen 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
Antworten:
Es gibt kein direktes Äquivalent zu
mvn exec:java
in gradle. Sie müssen entweder dasapplication
Plugin anwenden oder eineJavaExec
Aufgabe haben.application
PluginAktivieren Sie das Plugin:
Konfigurieren Sie es wie folgt:
Schreiben Sie in die Befehlszeile
JavaExec
AufgabeDefinieren Sie eine Aufgabe, sagen wir
execute
:Zum Laufen schreiben
gradle -PmainClass=Boo execute
. Du erhältstmainClass
ist eine Eigenschaft, die dynamisch über die Befehlszeile übergeben wird.classpath
ist so eingestellt, dass die neuesten Klassen abgeholt werden.Wenn Sie die
mainClass
Eigenschaft nicht übergeben, schlagen beide Ansätze wie erwartet fehl.quelle
build.gradle
, die festclasspath
codiert sind, um die Java- Klassen aus Ihrembuild.gradle
Java- Quellklassenpfad abzurufen. Selbst wenn Siemvn exec:java
den Klassenpfad ausführen , werden die Java-Quelldateien im aktuellen Maven-Verzeichnis abgerufen. In derJavaExec
Aufgabe habe ich das gleiche getan. Ändern Sie dieclasspath
für Ihre Java- Quelle und der Klassenpfad ändert sich automatisch. Es gibt keinmvn exec:java
Äquivalentgradle
dazu, dass Sie entweder dasapplication
Plugin anwenden oder eineJavaExec
Aufgabe haben müssen.task execute(...
zu build.gradle jede andere Aufgabe mit derselben Fehlermeldung fehlschlägt, die besagt, dass gradle erwartet, dass mainClass weitergegeben wird. Ich kann nicht putzen oder bauen.main = mainClass
mitmain = getProperty("mainClass")
und es wird Sie nicht mehr anschreien.gradle build
, siehe meine Antwort unten.Sie müssen nur das Gradle Application Plugin verwenden :
Und dann einfach
gradle run
.Wie Teresa betont, können Sie auch
mainClassName
als Systemeigenschaft konfigurieren und mit einem Befehlszeilenargument ausführen.quelle
build.graldle
. Aber ich habe ein Projekt mit vielen Util-Klassen, von denen jede eine Hauptmethode hat.System.getProperty("mainClass")
3) der Quellcode befindet sich dort, wo er gemäß Konvention sein soll, 4) alles funktioniert Wann legst duRunClass
die Build-Datei ein?build.gradle
hatmainClassName = "runclass.RunClass"
. Parameter-DmainClass
hat keine Auswirkung:gradle run -DmainClass=runclass.RunClass2
Führt die fest codierte Hauptklasse aus.ext.mainClass = project.hasProperty('mainClass') ? project.getProperty('mainClass') : 'org.gradle.sample.Main' ; apply plugin:'application' ; mainClassName = ext.mainClass
Wenn Sie dies tungradle -PmainClass=Foo run
, sollte esFoo
als Hauptklasse verwendet werden.Wenn Sie die Antwort von First Zero erweitern, möchten Sie wahrscheinlich etwas, das Sie auch
gradle build
fehlerfrei ausführen können.Beide
gradle build
undgradle -PmainClass=foo runApp
arbeiten:Hier legen Sie Ihre Standardhauptklasse fest.
quelle
plugins { application }; application { mainClassName = if (project.hasProperty("mainClass")) project.properties.get("mainClass").toString() else "Foo" }
Scanner
zum Lesen ein verwendetnextLine()
. Irgendwelche Gedanken zu einer Lösung dafür? Wenn Sie mit runApp ausgeführt werden, wird weiterhin "Keine Zeile gefunden" angezeigt.Sie können es parametrisieren und gradle clean build -Pprokey = goodbye übergeben
quelle