【问题标题】:How to execute a main class in a jar from gradle using the 'java' command如何使用“java”命令从 gradle 执行 jar 中的主类
【发布时间】:2013-10-07 02:47:56
【问题描述】:

我在<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,它将失败。那么,我该如何让它工作呢?非常感谢。

【问题讨论】:

    标签: java groovy gradle


    【解决方案1】:

    Exec.commandLine 需要一个 list 值:一个值用于可执行文件,另一个值用于每个参数。要执行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
    

    要了解有关ExecJavaExec 任务类型的更多信息,请咨询Gradle Build Language Reference

    【讨论】:

    • 比官方文档更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2012-01-01
    • 1970-01-01
    • 2019-06-23
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多