Gradle执行Java类(不修改build.gradle)

时间:2014-01-26 01:21:06

标签: java gradle execution

simple Eclipse plugin运行Gradle,它只是使用命令行方式启动gradle。

什么是maven编译和运行的gradle模拟 mvn compile exec:java -Dexec.mainClass=example.Example

这样可以运行gradle.build的任何项目。

更新:之前有类似问题What is the gradle equivalent of maven's exec plugin for running Java apps?,但解决方案建议更改每个项目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   

4 个答案:

答案 0 :(得分:129)

您只需使用Gradle Application plugin

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

然后只需gradle run

正如Teresa指出的那样,您还可以将mainClassName配置为系统属性,并使用命令行参数运行。

答案 1 :(得分:121)

使用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'.

评论更新:

gradle中没有mvn exec:java等效项,您需要应用应用程序插件或具有JavaExec任务。

答案 2 :(得分:17)

扩展First Zero的答案,我猜你想要一些你也可以运行gradle build而没有错误的东西。

gradle buildgradle -PmainClass=foo runApp都可以使用:

task runApp(type:JavaExec) {
    classpath = sourceSets.main.runtimeClasspath

    main = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "package.MyDefaultMain"
}

您可以在其中设置默认主类。

答案 3 :(得分:0)

您可以对其进行参数化并通过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;
    }