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

dja*_*fan 9 java build gradle

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

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

task packageTests(type: Jar) {
  from sourceSets.test.classes
}
Run Code Online (Sandbox Code Playgroud)

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

我尝试过这个并不起作用:

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

CaT*_*t.X 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)
       }
    }
 }
Run Code Online (Sandbox Code Playgroud)

您可以通过将其添加为存档来发布:

artifacts {
   archives allJar
}
Run Code Online (Sandbox Code Playgroud)


les*_*mal 7

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

// 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 })
}
Run Code Online (Sandbox Code Playgroud)

代码已在Gradle 1.12上测试过