上传构建工件,多个应用程序的常见任务

时间:2018-12-21 18:50:39

标签: android gradle groovy dependencies

我的monorepo中有5个不同的应用程序,每个应用程序的build.gradle包含一个几乎相同的任务,该任务与一个上载脚本一起负责上载与我们的Jenkins文件服务器匹配的文件。

我们可以称之为task releaseBuilds()

此代码位于名为artifactUploads.gradle的文件中,该文件还包含名为UploadPlugin的自定义插件。现在,我关心的是任务中的System.out.println()行。

apply plugin: UploadPlugin

task copyReleaseBuilds() {
    doLast {
        def dir = project.file('build/outputs/apk')
        dir.eachFileRecurse(FILES) { file ->
            if (file.getName().contains(".apk") && file.getName().contains("release")) {
                System.out.println("uploading ${file.getName()}")
                def rootDir = project.getRootDir().path
                def filePath = file.path
                def fileName = file.name.replace('app-', '')
                exec {
                    workingDir rootDir
                    commandLine "./uploadBuild.sh", filePath, "$dirPath" + fileName
                }.assertNormalExitValue()
            }
        }
    }
}

class UploadPlugin implements Plugin<Project> {
    void apply(Project project) {
        //Create container instance for config object
        //plugin stuff
         NamedDomainObjectContainer<Config> configContainer =
            project.container(Config)
    project.extensions.add('directory', configContainer)
    project.task('uploadConfig') << {
        def uploadConfig = project.extensions.getByName('directory')
    }
}

class Config{
    String name
    String dirPath

    Config(final String name){
        this.name = name
    }
}

在每个我的应用程序/项目的build.gradle文件中。我有线

apply from: "${rootDir}/artifactUploads.gradle

以及

directory{
name{
    dirPath = "hca/"
    println "stuff"
}

}

目录是在CustomPlugin中创建的某个对象。 现在,当我构建行println "Stuff"时,输出到gradle日志中,但是找不到包含在artifactUploads.gradle中的控制台输出,其中包含我的CustomPlugin和所有应用程序共享的任务。

据我了解,由于我的每个应用build.gradle都有 apply from: artifactUploads.gradle,现在每个应用程序都应运行copyReleaseBuilds()任务,并使用在每个应用程序dirPath的DSL部分中设置的自定义参数build.gradle

该构建不会达到该System.out.println()的水平还有其他原因吗?总的来说,我是新手,所以谢谢您的帮助

0 个答案:

没有答案