Gradle для выполнения класса Java (без изменения сборки.Gradle в)


здесь простой плагин Eclipse для запуска Gradle, который просто использует способ командной строки для запуска gradle.

что такое аналог gradle для компиляции и запуска maven mvn compile exec:java -Dexec.mainClass=example.Example

таким образом любой проект с gradle.build может быть запущен.

обновление: был аналогичный вопрос Что такое gradle эквивалент плагина Maven exec для запуска приложений 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 90

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 в плагин:

apply plugin:'application'
mainClassName = "org.gradle.sample.Main"

и просто gradle run.

как указывает Тереза, вы также можете настроить mainClassName как системное свойство и запустить с аргументом командной строки.

расширяясь на первый нулевой ответ, я думаю, вы хотите что-то, где вы также можете запустить 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"
}

где вы устанавливаете свой основной класс по умолчанию.