Istnieje prosta wtyczka Eclipse do uruchamiania Gradle, która po prostu używa wiersza poleceń do uruchomienia gradle.
Co to jest analog gradle dla Mavena, kompiluj i uruchamiaj
mvn compile exec:java -Dexec.mainClass=example.Example
W ten sposób gradle.build
można uruchomić dowolny projekt .
AKTUALIZACJA: Pojawiło się podobne pytanie. Jaki jest odpowiednik w Gradle wtyczki maven do uruchamiania aplikacji Java? pytano wcześniej, ale rozwiązanie sugerowało zmianę każdego projektubuild.gradle
package runclass;
public class RunClass {
public static void main(String[] args) {
System.out.println("app is running!");
}
}
Następnie wykonanie 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
Odpowiedzi:
Nie ma bezpośredniego odpowiednika
mvn exec:java
w gradle, musisz albo zastosowaćapplication
wtyczkę, albo miećJavaExec
zadanie.application
podłączAktywuj wtyczkę:
Skonfiguruj go w następujący sposób:
W wierszu poleceń napisz
JavaExec
zadanieZdefiniuj zadanie, powiedzmy
execute
:Aby biec, pisz
gradle -PmainClass=Boo execute
. DostajeszmainClass
to właściwość przekazywana dynamicznie w wierszu poleceń.classpath
ma odebrać najnowsze zajęcia.Jeśli nie przejdziesz
mainClass
własności, obie metody zawiodą zgodnie z oczekiwaniami.źródło
build.gradle
,classpath
jest zakodowany na stałe, aby pobrać klasy java ze ścieżki klas źródłabuild.gradle
java . Nawet po uruchomieniumvn exec:java
ścieżka klasy jest ustawiona tak, aby pobierać pliki źródłowe Java z bieżącego katalogu maven. WJavaExec
zadaniu zrobiłem to samo. Zmianaclasspath
dla java źródła i ścieżka klasa zmieni się automatycznie. Nie ma -mvn exec:java
odpowiednika w tym,gradle
że musisz albo zastosowaćapplication
wtyczkę, albo miećJavaExec
zadanie.task execute(...
do build.gradle każde inne zadanie kończy się niepowodzeniem z tym samym komunikatem o błędzie informującym, że gradle oczekuje przekazania metody mainClass. Nie mogę czyścić ani budować.main = mainClass
zemain = getProperty("mainClass")
i to nie będzie już na ciebie krzyczeć.gradle build
, zobacz moją odpowiedź poniżej.Wystarczy skorzystać z wtyczki Gradle Application :
A potem po prostu
gradle run
.Jak wskazuje Teresa, możesz również skonfigurować
mainClassName
jako właściwość systemową i uruchomić z argumentem wiersza poleceń.źródło
build.graldle
. Ale mam projekt z wieloma klasami użytkowymi, z których każda ma metodę główną.System.getProperty("mainClass")
3) kod źródłowy jest tam, gdzie powinien się znajdować, zgodnie z konwencją, 4) wszystko działa kiedyRunClass
wstawiasz plik kompilacji?build.gradle
mamainClassName = "runclass.RunClass"
. Parametr-DmainClass
nie działa:gradle run -DmainClass=runclass.RunClass2
wykonuje zakodowaną na stałe klasę główną.ext.mainClass = project.hasProperty('mainClass') ? project.getProperty('mainClass') : 'org.gradle.sample.Main' ; apply plugin:'application' ; mainClassName = ext.mainClass
teraz, kiedy to zrobiszgradle -PmainClass=Foo run
, powinieneś użyćFoo
jako głównej klasy.Rozwijając odpowiedź First Zero, myślę, że chcesz czegoś, na czym możesz również działać
gradle build
bez błędów.Oba
gradle build
igradle -PmainClass=foo runApp
pracuj z tym:gdzie ustawiasz domyślną klasę główną.
źródło
plugins { application }; application { mainClassName = if (project.hasProperty("mainClass")) project.properties.get("mainClass").toString() else "Foo" }
Scanner
do odczytunextLine()
. Jakieś pomysły na rozwiązanie tego problemu? Podczas pracy z runApp otrzymujesz komunikat „nie znaleziono linii”.Możesz go sparametryzować i przekazać gradle clean build -Pprokey = goodbye
źródło