Gradle / Groovy / Shadow项目创建可执行jar文件

时间:2016-01-31 05:13:31

标签: groovy gradle jar

使用此build.gradle文件:

plugins {
   id 'groovy'
   id 'com.github.johnrengelman.shadow' version '1.2.2'
}

repositories {
    mavenCentral()
}

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

version = '0.1'
shadowJar {
    mergeServiceFiles()
    manifest {
        attributes 'Main-Class': 'com.mycompany.tools.EncodeFile'
    }
}

当我运行~/TOOLS/gradle-2.10/bin/gradle shadowJar时,我得到一个基本为空的.jar文件(264字节)。

我希望它包含groovy.jar和我的.class文件。

在网上查看样本时有些困惑,因为看起来插件{id ...}是新的首选语法,但样本较旧且不使用该语法。

目录结构是:

./src/groovy/com/mycompany/tools/EncodeFile.groovy
./build.gradle

我猜我要么移动我的.groovy文件,要么我需要修改build.gradle指向groovy文件。

  1. 我该如何解决这个问题,以便我得到一个像这样执行的.jar文件:java -jar build/libs/EncodeFile.jar

  2. 有关使用gradle构建自包含.jar文件的任何其他提示,我们表示赞赏。 Groovy和Java(以及混合)。

  3. 我可能会添加第三方.jar文件,我想将其嵌入可执行jar中。任何提示都将受到赞赏。

1 个答案:

答案 0 :(得分:3)

结构

./src/groovy/com/mycompany/tools/EncodeFile.groovy

应该是

./src/main/groovy/com/mycompany/tools/EncodeFile.groovy

Gradle认为您没有源代码(由于缺少main目录)

另外,如果您将gradle文件更改为(添加应用程序插件):

plugins {
   id 'groovy'
   id 'application'
   id 'com.github.johnrengelman.shadow' version '1.2.2'
}

repositories {
    mavenCentral()
}

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

version = '0.1'
mainClassName = 'com.mycompany.tools.EncodeFile'
shadowJar {
    mergeServiceFiles()
}

然后你获得了相同的shadowJar功能,但是你也可以获得gradle run来运行未经过调整的应用