我有一个多项目gradle构建,我想将所有从多个项目构建的jar部署到目标目录中,并且无法弄清楚如何完成它。
目录结构非常标准:
.
├── project1
│ ├── build
│ │ └── libs
│ │ └── project1.jar
│ └── src
│ └── main
│ ├── java
│ └── resources
├── project2
│ ├── build
│ │ └── libs
│ │ └── project2.jar
│ └── src
│ └── main
│ ├── java
│ └── resources
├── build.gradle
├── gradle.properties
└── settings.gradle
我需要project1.jar
& project2.jar
已复制到目标目录。
另一个问题是项目数量将继续增长。因此,在几周内可能会有project3.jar
。如果我不必更新任何内容以使其jar文件也包含在副本中(除了编辑我的settings.gradle文件以在构建中包含project3),那将是很好的。
将./*/build/libs/*.jar
复制到某个目标目录对我来说会有用,我想,我只是不知道该怎么做。
感谢您的帮助!
答案 0 :(得分:4)
您只需将以下代码添加到build.gradle
和project1
中的project2
:
jar {
destinationDir project.file('../dest')
}
编辑(在评论中讨论后)
您需要将以下代码添加到root build.gradle文件
subprojects {
apply plugin: 'java'
}
task copyFiles(type: Copy, dependsOn: subprojects.jar) {
from(subprojects.jar)
into project.file('dest')
}
答案 1 :(得分:1)
作为Opal's answer的补充:
如果您只想复制子项目的一部分'罐子你可以应用这样的过滤器:
/** Returns true if a project has a source directory */
def hasSrc(proj){
return new File(proj.projectDir, "src").exists()
}
/** Copies the jars of the subprojects to a dir of the umbrella project */
task copyJars(type: Copy, dependsOn: subprojects.jar) {
// Skip empty subprojects
from(subprojects.findAll{hasSrc(it)}.jar)
into project.file("$buildDir/jars")
}
run.dependsOn copyJars