如何创建一个调用主类的任务

JBT*_*JBT 11 groovy gradle

我想要做的是在build.gradle中创建一个将执行主类(使用main方法的类)的任务,但我不知道如何.

我做了一个测试项目来测试如何做到这一点.这是文件结构布局:

testProject/
    build.gradle
    src/main/groovy/hello/world/HelloWorld.groovy
Run Code Online (Sandbox Code Playgroud)

以下是build.gradle的内容:

apply plugin: 'groovy'
apply plugin: 'maven'

repositories {
    mavenCentral()
}

dependencies {
    compile     'org.codehaus.groovy:groovy-all:2.0.6'
}

task( hello, dependsOn: jar, type: JavaExec ) {
    main = 'hello.world.HelloWorld'
}
Run Code Online (Sandbox Code Playgroud)

以下是HelloWorld.groovy的内容:

package hello.world

class HelloWorld {
    public static void main(String[] args) {
        println "Hello World!"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我从shell获得的:

testProject>$ gradle hello
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:hello
Error: Could not find or load main class hello.world.HelloWorld
:hello FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':hello'.
> Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 4.232 secs
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:我怎样才能gradle hello工作?非常感谢你.

JBT*_*JBT 15

经过一番谷歌搜索,我找到了解决方案.我唯一需要改变的是任务块.工作的粘贴在下面:

task( hello, dependsOn: jar, type: JavaExec ) {
    main = 'hello.world.HelloWorld'
    classpath = sourceSets.main.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)


Grz*_*Żur 9

有一个应用程序插件可以执行此操作.

apply plugin: 'application'
mainClassName = 'hello.world.HelloWorld'
Run Code Online (Sandbox Code Playgroud)

然后打电话

gradle run
Run Code Online (Sandbox Code Playgroud)

除了添加run任务外,应用应用程序插件也会改变assemble任务的行为.现在它将生成一个可以使用shell脚本运行的独立应用程序.