2012-12-08 76 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

相关问题