Gradle:在构建时将子项目文件复制到 rootproject 中

问题描述

鉴于此 gradle 项目:

org.mycompany.rootProject
|
|--org.mycompany.subProject0001
|  |
|  |-src/
|  | |
|  | |-dist/
|  | | |
|  | | |-README.MD
|  | | |-runSubProject0001.cmd
|  | |-main/
|  | |-test/
|  | |
|  |-build.gradle
|
|--org.mycompany.subProject0002
|  | |
|  | |-dist/
|  | | |
|  | | |-README.MD
|  | | |-runSubProject0002.cmd
|  | |-main/
|  | |-test/
|  | |
|  |-build.gradle
|  .
|  .
|  . (goal is keeping going until subproject 1000)
|-build.gradle
|-settings.gradle

如何在构建时从每个子项目中获取 README 和“runSubProject”并复制到我的根项目中(目标是“{rootProject}/build/distribution/{subprojectName}/”)?

我所有的项目都使用“java-application”插件

我试图让 gradle 遍历每个子项目并将这些文件复制到我的根项目中,但我失败了。

解决方法

所以这就是我在 build.gradleorg.mycompany.rootProject 中所做的,并且奏效了:

task getArtifactsFromSubprojects {
    subprojects.each {
        if(it.getName().contains("cjv")){
            dependsOn it.getPath() + ':convertReadmeToPdf'
            def sourcePath = it.getProjectDir().toString() + '/src/dist'
            def destinationPath = getRootDir().toString() + '/src/dist/' + it.getName() + '/'
            it.copy {
                from sourcePath
                into destinationPath
            }
        }
    }
}

PS:我对我的子项目做了一些工作,并实现了一个名为 convertReadmeToPdf 的新任务,它在与 README.PDF 相同的文件夹中生成一个 README.MD

运行此任务后,结果如下:

org.mycompany.rootProject
|
|--src/
|  |
|  |-dist/
|  | |
|  | |-org.mycompany.subProject0001/
|  | | |
|  | | |-README.MD
|  | | |-runSubProject0001.cmd
|  | |
|  | |-org.mycompany.subProject0002/
|  | | |
|  | | |-README.MD
|  | | |-runSubProject0002.cmd
|  | |
|  | |-org.mycompany.subProject0003/
|  | | |
|  | | |-README.MD
|  | | |-runSubProject0003.cmd
|  | .
|  | .
|  | .
|  | 
|  |-main/
|  | 
|  |-test/
|
|
|-build.gradle
|-settings.gradle