Gradle自动导入Module,删除文件夹内的项目生成的缓存(用来迁移一个文件夹所有项目时候文件总量大的问题)

/**
 * 判断某个文件或者文件夹是否是module
 * @param f
 * @return
 */
boolean isModuleDir(File f) {
    boolean isModule = false
    if (f.isDirectory()) {
        def gradleFile = false
        def hasDir = false
        def settingsFile = false
        f.listFiles().each {
            if (it.name.equals("build.gradle") && it.isFile()) {
                gradleFile = true
            }
            if (it.name.equals("settings.gradle") && it.isFile()) {
                settingsFile = true
            }
            if (it.isDirectory()) {
                hasDir = true
            }
        }
        //1.必须有一个文件夹
        // 2.有build.gradle文件,才算完整
        // 3.如果有settings.gradle 则是一个项目的文件夹,不应该作为module
        isModule = hasDir && gradleFile && !settingsFile
    }
    return isModule
}


/**
 * 判断某个文件或者文件夹是否是项目
 * @param f
 * @return
 */
boolean isProjectDir(File f) {
    boolean aPojecet = false
    if (f.isDirectory()) {
        def gradleFile = false
        def hasDir = false
        def settingsFile = false
        //必须有一个文件夹,且有gradle 文件,才算完整,如果有settings.gradle 则是一个完整项目的文件夹,不应该作为module 打开
        f.listFiles().each {
            if (it.name.equals("build.gradle") && it.isFile()) {
                gradleFile = true
            }
            if (it.name.equals("settings.gradle") && it.isFile()) {
                settingsFile = true
            }
            if (it.isDirectory()) {
                hasDir = true
            }
        }
        //1.必须有一个文件夹
        // 2.有build.gradle文件,才算完整
        // 3.如果有settings.gradle 则是一个项目的文件夹
        aPojecet = hasDir && gradleFile && settingsFile
    }
    return aPojecet
}


/**
 * 引入某个文件夹的全部模块,包括子文件夹
 * @param dir
 */
void includeAllModule(File dir) {
    println "----include $dir all module------"
    dir.listFiles().each() {
        if (isModuleDir(it)) {
            println("include module:" + it.name)
            include ":${it.name}"//app 交互过程中定义的标准key等 :ExternalPlugin以及 plugin-host需要使用
            project(":${it.name}").projectDir = it
        } else {
            if (it.isDirectory() && it.listFiles().size() > 0) {
                includeAllModule(it)
            }
        }
    }
}

/**
 * 删除文件夹所有项目构建产生的缓存
 * @param dir
 */
def deleteProjectBuildCache(dir) {
    if (dir.isDirectory()) {
        if (isProjectDir(dir)) {
            println "-------项目$dir------"
            //项目目录要删除的文件,.svn文件夹根据自己实际需求配置是否要删除
            def deleteFileNames = [".gradle", ".idea", "build", "gradlew", "gradlew.bat", ".svn"]
            deleteFileNames.forEach {
                def gFile = new File(dir, it)
                if (gFile.exists()) {
                    try {
                        if (!delete(gFile)) {
                            println "删除失败:" + gFile
                        } else {
                            println "删除:" + gFile
                        }
                    } catch (a) {
                        println "删除异常:" + a.message
                    }
                }
            }
        }
        if (isModuleDir(dir)) {
            println("\t*模块:" + dir.name)
            def buildFile = new File(dir, "build")
            if (buildFile.exists() && buildFile.isDirectory()) {
                try {
                    if (!delete(buildFile)) {
                        println "删除失败:" + buildFile
                    } else {
                        println "删除:" + buildFile
                    }
                } catch (a) {
                    println "删除异常:" + a.message
                }
            }
        } else {
            dir.listFiles().each {
                deleteProjectBuildCache(it)
            }
        }
    }

}

/**
 * 删除文件夹项目构建缓存任务
 */
task("deleteDirProjecetBuildChache") {
    doFirst {
        def hostlibDir = file("G:\\MyCode\\Flutter")
        deleteProjectBuildCache(hostlibDir)
    }
}

posted @ 2023-03-02 10:31  烟花易冷心易碎  阅读(33)  评论(0编辑  收藏  举报