2016-01-31 28 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? –