Gradle для выполнения Java-класса (без изменения build.gradle)
Существует простой плагин Eclipse для запуска Gradle, который просто использует командную строку для запуска gradle.
Что такое аналог gradle для компиляции и запуска mavenmvn compile exec:java -Dexec.mainClass=example.Example
Таким образом, любой проект с gradle.build
может быть запущен.
ОБНОВЛЕНИЕ: был похожий вопрос Что такое простой эквивалент exec-плагина maven для запуска приложений Java? спрашивал раньше, но решение предлагало изменить каждый проект build.gradle
package runclass;
public class RunClass {
public static void main(String[] args) {
System.out.println("app is running!");
}
}
Затем выполнение 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 ответа
Использование JavaExec
, В качестве примера приведем следующее в build.gradle
task execute(type:JavaExec) {
main = mainClass
classpath = sourceSets.main.runtimeClasspath
}
Бежать gradle -PmainClass=Boo execute
, Ты получаешь
$ gradle -PmainClass=Boo execute
:compileJava
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes
:execute
I am BOO!
mainClass
это свойство передается динамически в командной строке. classpath
настроен на получение последних классов.
Если вы не проходите в mainClass
собственность, это терпит неудачу как ожидалось.
$ 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'.
ОБНОВЛЕНО из комментариев:
Здесь нет mvn exec:java
эквивалентно Gradle, вам нужно либо применить плагин приложения или иметь задачу JavaExec.
Вам просто нужно использовать плагин Gradle Application:
apply plugin:'application'
mainClassName = "org.gradle.sample.Main"
А потом просто gradle run
,
Как указывает Тереза, вы также можете настроить mainClassName
как системное свойство и запускается с аргументом командной строки.
В продолжение ответа First Zero, я думаю, вы хотите что-то, что вы также можете запустить gradle build
без ошибок.
И то и другое gradle build
а также gradle -PmainClass=foo runApp
работать с этим:
task runApp(type:JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "package.MyDefaultMain"
}
где вы устанавливаете основной класс по умолчанию.
Вы можете параметризовать его и передать gradle clean build -Pprokey=goodbye
task choiceMyMainClass(type: JavaExec) {
group = "Execution"
description = "Run Option main class with JavaExecTask"
classpath = sourceSets.main.runtimeClasspath
if (project.hasProperty('prokey')){
if (prokey == 'hello'){
main = 'com.sam.home.HelloWorld'
}
else if (prokey == 'goodbye'){
main = 'com.sam.home.GoodBye'
}
} else {
println 'Invalid value is enterrd';
// println 'Invalid value is enterrd'+ project.prokey;
}