我想要做的是在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)
有一个应用程序插件可以执行此操作.
apply plugin: 'application'
mainClassName = 'hello.world.HelloWorld'
Run Code Online (Sandbox Code Playgroud)
然后打电话
gradle run
Run Code Online (Sandbox Code Playgroud)
除了添加run任务外,应用应用程序插件也会改变assemble任务的行为.现在它将生成一个可以使用shell脚本运行的独立应用程序.