2012-12-08 127 views
9

可以將多個項目放到一個jar中嗎?可以將多個項目的Gradle jar放入一個jar嗎?

我知道你可以使用的方法是這樣一個單一的項目做到這一點:

task packageTests(type: Jar) { 
    from sourceSets.test.classes 
} 

但如何做一個人拉上多個子項目到一個罐子?

我嘗試這樣做,這是行不通的:

task packageTests(type: Jar) { 
    from project(':core').sourceSets.main.classes 
    from project(':core:google').sourceSets.test.classes 
    from project(':core:bing').sourceSets.test.classes 
} 
+0

,可以用[fatJar](https://github.com/musketyr/gradle-fatjar-plugin),OneJar,或[應用拉鍊](http://gradle.org/docs/current/userguide/application_plugin.html)。 –

+0

所有這3個項目都是特定項目。他們中的任何一個都不會壓縮一個根項目及其所有子項目。 – djangofan

+0

所有這些工作均基於項目應用於其他人作爲依賴關係的模型。 –

回答

6

這裏是我的解決方案,這是一個有點簡單:

// Create a list of subprojects that you wish to include in the jar. 
def mainProjects = [':apps',':core',':gui',':io'] 
task oneJar(type: Jar , dependsOn: mainProjects.collect{ it+":compileJava"}) { 
    baseName = 'name of jar' 
    from files(mainProjects.collect{ project(it).sourceSets.main.output }) 
} 

代碼已經在搖籃1.12進行了測試

+0

這仍然適用於gradle 3.1。 – ndtreviv

7

這應該爲你希望做什麼工作。這應該在根gradle構建文件中。

subprojects.each { subproject -> evaluationDependsOn(subproject.path)} 

task allJar(type: Jar, dependsOn: subprojects.assemble) { 
    baseName = 'your-base-name' 
    subprojects.each { subproject -> 
     from subproject.configurations.archives.allArtifacts.files.collect { 
     zipTree(it) 
     } 
    } 
} 

你就可以把它作爲存檔發佈此:

artifacts { 
    archives allJar 
} 
+0

這個答案几乎回答了我的問題。它給了我很多想法,但我從來沒有解決過。 gradle編譯器給我提供了錯誤:無法在項目中找到屬性'assemble'。我試圖以各種方式解決它,但不能。我使用Gradle 1.2。我仍然希望通過並仍在努力。 – djangofan

+0

您可以嘗試閱讀Gradle上的文檔。這聽起來像你是複製和粘貼,沒有任何工作。 'assemble'是java插件爲您提供的屬性。如果你的一個子項目沒有java插件,那麼你會得到你提到的錯誤。 –

+0

我在「allprojects」部分添加了java插件。不應該爲我所有的子項目工作嗎?無論如何,我特意將java插件添加到抱怨的項目中,並沒有幫助。我會試着在GitHub上放一個簡單的例子來獲得更好的幫助。 – djangofan

3

以下解決方案與CaTalyst.X提出的方案非常相似,但使用罐子任務直接。

subprojects.each { subproject -> evaluationDependsOn(subproject.path) } 
jar.dependsOn subprojects.tasks['classes'] 
jar { 
    baseName = 'MyApp' 
    manifest { 
    attributes 'Main-Class': 'org.abc.App' 
    } 
    subprojects.each { subproject -> 
    from subproject.sourceSets.main.output.classesDir 
    from subproject.sourceSets.main.output.resourcesDir 
    } 
} 

正是在搖籃2.1測試和2.2.1

相關問題