从单个 Gradle 构建调用打包和 运行 可执行 JAR?

Packaging and running executable JAR from single Gradle build invocation?

这是我的 Groovy 应用程序的驱动程序 class:

package org.me.myapp

class MyDriver {
    static void main(String[] args) {
        // The p flag was passed in and had a value of 50!
        println String.format("The %s flag was passed in and had a value of %s!", args[0], args[1])
    }
}

我正在尝试增强我的 Gradle 构建,以便我可以:

  1. Gradle 打包我的可执行 JAR;和
  2. 运行 我的可执行 JAR,将命令行参数传递给它的主要方法

理想情况下,我可以通过以下方式 运行 我的应用程序:

gradle run -p 50

并查看以下控制台输出:

The p flag was passed in and had a value of 50!

这是我的 build.gradle:

apply plugin: 'groovy'
apply plugin: 'eclipse'

sourceCompatibility = '1.7'
targetCompatibility = '1.7'

repositories {
    mavenCentral()
}

dependencies {
    compile (
        'org.codehaus.groovy:groovy-all:2.3.9',
        'com.google.guava:guava:18.0',
        'com.google.inject:guice:3.0'
    )
}

task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}

我需要做什么才能拥有这样的 Gradle 程序包 + 运行 我的应用程序?

要执行 run 任务,您需要应用 application 插件。您可以将以下代码段添加到您的 build.gradle

apply plugin: 'application'
mainClassName = "org.me.myapp.MyDriver"
run {
    args "p"
    args "50"
}

您可以将 "p""50" 替换为一些 gradle 属性 名称,并从命令行传递这些属性,如

gradle run -Pkey=p -Pvalue=50