我有这些文件 <project_root>
夹:
./build.gradle
./build/libs/vh-1.0-SNAPSHOT.jar
./libs/groovy-all-2.1.7.jar
./src/main/groovy/vh/Main.groovy
在里面 build.gradle
文件,我有这个任务:
task vh( type:Exec ) {
commandLine 'java -cp libs/groovy-all-2.1.7.jar:build/libs/' +
project.name + '-' + version + '.jar vh.Main'
}
该 Main.groovy
文件很简单:
package vh
class Main {
static void main( String[] args ) {
println 'Hello, World!'
}
}
插入字符串值后,命令行为:
java -cp libs/groovy-all-2.1.7.jar:build/libs/vh-1.0-SNAPSHOT.jar vh.Main
如果我直接从shell运行命令,我得到正确的输出。但是,如果我跑 gradle vh
,它会失败。那么,我该如何使它工作?非常感谢你。
Exec.commandLine
期待一个 名单 值:可执行文件的一个值,每个参数的另一个值。要执行Java代码,最好使用 JavaExec
任务:
task vh(type: JavaExec) {
main = "vh.Main"
classpath = files("libs/groovy-all-2.1.7.jar", "build/libs/${project.name}-${version}.jar")
}
通常,您不必像这样对类路径进行硬编码。例如,如果您正在使用 groovy
插件,和 groovy-all
已被宣布为 compile
依赖(并且知道第二个Jar是从 main
来源),你宁愿这样做:
classpath = sourceSets.main.runtimeClasspath
要了解更多关于 Exec
和 JavaExec
任务类型,请咨询 Gradle构建语言参考。
Exec.commandLine
期待一个 名单 值:可执行文件的一个值,每个参数的另一个值。要执行Java代码,最好使用 JavaExec
任务:
task vh(type: JavaExec) {
main = "vh.Main"
classpath = files("libs/groovy-all-2.1.7.jar", "build/libs/${project.name}-${version}.jar")
}
通常,您不必像这样对类路径进行硬编码。例如,如果您正在使用 groovy
插件,和 groovy-all
已被宣布为 compile
依赖(并且知道第二个Jar是从 main
来源),你宁愿这样做:
classpath = sourceSets.main.runtimeClasspath
要了解更多关于 Exec
和 JavaExec
任务类型,请咨询 Gradle构建语言参考。