2017-02-21 49 views
0

我有一個庫,用來使用Gradle構建一些CLI工具。每個CLI工具都是獨立的JAR。目前,每一個工具需要一個單獨的搖籃項目,一組相關的目錄,例如:Gradle:沒有多個項目的多個JAR

enter image description here

擁有所有這些結構是造成工具的整個集合中變得非常笨重,難以工作用。有沒有辦法將所有不同的Main收集到一個文件夾(適當地重命名),並配置Gradle將每個文件夾轉換成單獨的JAR?

FWIW,JAR目前使用https://github.com/johnrengelman/shadow創建。 JAR大小無關緊要。

在此先感謝。

+1

您可以定義多個罐子任務在您的build.gradle中,並使您的主jar任務依賴於它,以便每當您調用jar任務時,gradle都將執行其他任務。 –

+0

加上https://github.com/johnrengelman/shadow/issues/138看起來可能會導致解決方案。謝謝。 – Mohan

+0

我發表評論作爲暗示,因爲我無法花時間發佈完整答案。很高興,如果它幫助你。 –

回答

1

罐子只是zip文件夾裏面的META-INF文件夾。使用Zip任務創建它們,並使用dependsOn作爲構建序列的一部分運行任務。

了,我想下面的代碼改變jar文件:

task changeJar (type: Zip) { 
    baseName project.name 
    extension 'jar' 
    destinationDir new File('build') 
    entryCompression ZipEntryCompression.STORED 
    from { zipTree(new File(core.libsDir, core.name + '.jar')) } 
    from (<somewhere else>) { 
     exclude 'META-INF/' 
    } 
} 
1

我不知道這是否是一個不錯的選擇,但你可能會感興趣的我gradle-java-flavours插件。

例如:

apply plugin: 'com.lazan.javaflavours' 
javaFlavours { 
    flavour 'tool1' 
    flavour 'tool2' 
} 
dependencies { 
    compile  'a:a:1.0' // common to all tools 
    compileTool1 'b:b:2.0' // compile deps for tool1 only 
    runtimeTool2 'c:c:2.0' // runtime deps for tool2 only 
} 

目錄

  • 的src /主/ JAVA,SRC /測試/ JAVA,SRC /主/資源,源/測試/資源 - 共同代碼&測試
  • src/tool1/java,src/testTool1/java,src/tool1/resources,src/testTool1/resources - tool1 only sources
  • src/tool2/java,src/testTool2/java,src/tool2/resources,src/testT ool2 /資源 - TOOL2唯一來源

  • projectName.jar
  • PROJECTNAME-tool1.jar
  • PROJECTNAME-tool2.jar