Java 在同一位置发布多个子项目JAR

Java 在同一位置发布多个子项目JAR,java,gradle,Java,Gradle,我有一个gradle多项目(java) 根 |-苏巴 |-subB |-分包 我成功地配置了我的root build.gradle和gradle.settings以解决依赖关系并生成整个项目OK 但是所有jar都是在subX/build/libs中生成的(X=A,B,C) 是否有一种方法可以在最后重新组合所有内容(同时使用运行时资源) 那么一切都准备就绪可以发货了吗?在gradle在线帮助中找到了答案(尽管不知何故,它并没有被真正标记为可以找到它) 任务部署(dependsOn:assembly

我有一个gradle多项目(java)

根 |-苏巴 |-subB |-分包

我成功地配置了我的root build.gradle和gradle.settings以解决依赖关系并生成整个项目OK

但是所有jar都是在subX/build/libs中生成的(X=A,B,C)

是否有一种方法可以在最后重新组合所有内容(同时使用运行时资源)
那么一切都准备就绪可以发货了吗?

在gradle在线帮助中找到了答案(尽管不知何故,它并没有被真正标记为可以找到它)

任务部署(dependsOn:assembly)
project.tasks.withType(Jar).each{archiveTask->
抄袭{
来自archiveTask.archivePath
进入部署区
}
}
}
}

您的解决方案存在一些问题:任务依赖关系不正确,过时的Jar文件不会被删除,并且无法保证找到所有
Jar
任务。(后者可以通过使用
project.tasks.withType(Jar).all
,而不是
。each
)来修复)下面是一个更准确的解决方案:

task deploy(type: Sync) {
    into "$buildDir/deploy"
    for (subproject in subprojects) {
        from subproject.tasks.withType(Jar)
    }
}

PS:除了一些需要最大灵活性的情况外,最好使用
复制
同步
任务,而不是
项目。复制
方法。

谢谢您的帮助。我是Groovy DSL的新手,并不完全理解某些命令的含义。我查看了“Sync”任务规范,因此理解了“into”和“from”方法。但我还有另一个问题:为什么我们要使用Jar类型的任务来查找要同步的Jar文件?如果我还想复制主要的源代码集资源,你会如何找到这些文件?为什么?它们被放在罐子里。你是说第三方依赖关系吗?
task deploy(type: Sync) {
    into "$buildDir/deploy"
    for (subproject in subprojects) {
        from subproject.tasks.withType(Jar)
    }
}