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;
    }
Другие вопросы по тегам