Gradle可以将多个项目放入一个jar子里吗?

Gradle可以将多个项目放入一个jar子里吗?

我知道你可以使用这样的方法为一个项目做到这一点:

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

但是,一个人如何将多个子项目压缩成一个jar子?

我试过这个并不起作用:

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

这是我的解决方案,这有点简单:

 // 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 }) } 

代码已在Gradle 1.12上测试过

这应该适用于您想要做的事情。 这应该在根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 } 

以下解决方案与CaTalyst.X提出的解决方案非常相似,但直接使用jar任务。

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

它针对Gradle 2.1和2.2.1进行了测试