2016-01-31 29 views
1

使用此文件的build.gradle:摇篮/ Groovy中/阴影项目创建可执行的JAR文件

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' 
    } 
} 

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

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

在Web上查看示例时存在一些混淆,因为它似乎是插件{id ...}是新的首选语法,但示例较旧,并且不使用该语法。

目录结构:

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

我猜想,我要么将我.groovy作为文件,或者,我需要修改的build.gradle指向常规文件。

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

  2. 感谢您使用gradle构建自包含的.jar文件的任何其他提示。 Groovy和Java(以及混合)。

  3. 我可能会添加第三方.jar文件,我将要嵌入可执行jar。任何提示,将不胜感激。

+0

什么是'干净的gradle的shadowJar'输出 –

回答

3

结构

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

应该

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

摇篮认为你没有源代码(由于缺少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只运行unjarred应用

+0

你不会接受的答案。额外的功劳:为什么jar文件名为EncodeFile-0.1-all.jar。 EncodeFile很明显,0.1很明显,但是为什么 - 所有? –

+0

因为它是重新打包成一个jar的类的_“all”。你的类,依赖类,其中_all_是 –

+0

阴影是为我做的吗?我可以重写吗?当然,我可以重命名jar,但是我想知道约定:任何.jar文件的其他jar文件都附加了-all? –