gradle 项目自动注册子目录模块-阿里云开发者社区

开发者社区> Hulytu> 正文

gradle 项目自动注册子目录模块

简介: java gradle 项目自动注册当前目录下的模块
+关注继续查看

在开发android项目的时候,经常同一个目录下会挂载很多的子模块,而我们又需要settings.gradle里面进行配置

include(':app')

当模块特别多的时候,写起来就会很麻烦,那么简单的注册方法我用kotlin脚本写了一个,提供大家使用

脚本名称: 使用settings.gradle.kts 代替原来的settings.gradle

// 项目名称
rootProject.name = "Arto"

autoRegisterModule()
// 主动排除 src 目录
// autoRegisterModule(ignoreSubDirs = arrayOf("src"))

/**
 * 自动注册当前所有子目录下的模块
 * @param dir 项目目录
 * @param ignoreSubDirs 忽略的子目录
 */
fun autoRegisterModule(
    dir: File = settingsDir,
    ignoreSubDirs: Array<String> = emptyArray()
) {
    val moduleSymbol = arrayOf("build.gradle", "build.gradle.kts")

    // 忽略的目录,如果有不想自动注册的目录也可以放进来
    val ignoreDirs = arrayOf(".gradle", ".idea", ".git", "gradle", "build") + ignoreSubDirs

    dir.listFiles()?.forEach { f ->
        if (!f.isDirectory || ignoreDirs.contains(f.name)) return@forEach
        // 遍历子目录
        (f.listFiles() ?: return@forEach)
            // 判断此目录下有没有符合条件的文件
            .takeIf { fs -> fs.any { !it.isDirectory && moduleSymbol.contains(it.name) } }
            ?.let {
                val moduleName = f.name
                include(":$moduleName")
                println("注册模块:$moduleName")
            }
    }
}

代码非常简单,如果有需要引入外部目录作为模块的,那个还是按以前的方法吧;这里一并记录下引入外部目录作为模块的两种方式,同样,使用kotlin脚本,因为也是在settings.gradle.kts中注册的

// 需要引入的外部模块名称
include(":xx")

// 方式一:相对目录
project(":xx").projectDir = File(settingsDir,"与当前目录的相对路径")

// 方式二:使用绝对路径
project(":xx").projectDir = File("模块目录的绝对路径")

补充:

朋友反馈说对kotlin不熟悉,希望提供个groovy版本的,下面放出groovy版本

注:settings.gradlesettings.gradle.kts保留一个即可

settings.gradle

rootProject.name = "Arto"

autoRegisterModule()

// 自动注册当前所有子目录下的模块
def autoRegisterModule() {

    def moduleSymbol = ["build.gradle", "build.gradle.kts"]

    // 忽略的目录,如果有不想自动注册的目录也可以放进来
    def ignoreDirs = [
            ".gradle",
            ".idea",
            ".git",
            "build"
    ]

    settingsDir.eachDir { file ->
        if (ignoreDirs.contains(file.getName())) return

        file.eachFile { f ->
            if (!f.isDirectory() && moduleSymbol.contains(f.getName())) {
                def modelName = file.getName()
                // 是模块,可以注册
                println "注册模块:$modelName"
                include(":$modelName")
            }
        }
    }
}

同样外部模块引用代码

// 方式一:相对目录
project(":xx").projectDir = new File(settingsDir,"与当前目录的相对路径")

// 方式二:使用绝对路径
project(":xx").projectDir = new File("模块目录的绝对路径")

打完收工!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring Boot项目字符集乱码解决方案
今天打开自己做的商品操作后台,在操作的过程中发现添加的商品乱码。折腾了一番,最终解决了,记录下解决方案。 1、我在本地开发的时候,进行操作是不会乱码的,但是部署到服务器上就乱码了,这个时候应该排除是项目的乱码问题。
723 0
(周期计划-6)从公司项目配置看Gradle(2.0)
2018年技术周期计划:周期计划-6(2018/2/5-2018/2/11) 写在前面 https://www.jianshu.com/p/8242dcc90f91 之前写过一篇博客,博客内容是关于项目中对Gradle的配置升级。
789 0
(周期计划-4)从公司项目配置看Gradle
2018年技术周期计划:周期计划-4(2018/1/21-2018/1/28) 写在前面 不知不觉自己已经在北京呆了半年的时间,自己所在的实习公司也已经工作了四个月的时间。
920 0
为什么Spring MVC能自动转换json/xml,你研究过它背后的原理吗?
SpringMVC是目前主流的Web MVC框架之一。本文使用的demo基于maven,是根据入门blog的例子继续写下去的。
752 0
Django问卷调查项目思路
Django问卷调查项目思路流程: 1 后端思路 : 需求分析 —- 找出各实体对应关系 —- 设计model架构 —- 统一资源封装 — 提供资源API入口 —- 设计项目实体功能 — 通过API实现实体...
1172 0
生成项目目录结构(based on windows system)
描述:         作为程序员,在工作中,我们经常会有需求,需要罗列出项目的结构图;如果手工来整理的话,太过浪费时间,其实我们可以借助tree命令来快速生成目录结构。         本文主要介绍一下,基于windows系统,如何快速生成目录结构的方法。
2000 0
+关注
Hulytu
Android开发
1
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载