将jar文件从多项目gradle构建部署到目标目录

时间:2014-07-21 01:02:19

标签: java gradle

我有一个多项目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复制到某个目标目录对我来说会有用,我想,我只是不知道该怎么做。

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

您只需将以下代码添加到build.gradleproject1中的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