在開(kāi)發(fā)android項(xiàng)目的時(shí)候好乐,經(jīng)常同一個(gè)目錄下會(huì)掛載很多的子模塊锥腻,而我們又需要settings.gradle
里面進(jìn)行配置
include(':app')
當(dāng)模塊特別多的時(shí)候碍拆,寫(xiě)起來(lái)就會(huì)很麻煩逸寓,那么簡(jiǎn)單的注冊(cè)方法我用kotlin腳本寫(xiě)了一個(gè)居兆,提供大家使用
腳本名稱(chēng): 使用settings.gradle.kts
代替原來(lái)的settings.gradle
// 項(xiàng)目名稱(chēng)
rootProject.name = "Arto"
autoRegisterModule()
fun autoRegisterModule() {
// 當(dāng)前項(xiàng)目目錄下的子目錄
val dirs = settingsDir.listFiles() ?: return
// 使用這兩個(gè)文件作為判斷是不是子模塊的依據(jù)
val moduleFlags = arrayListOf("build.gradle", "build.gradle.kts")
// 忽略的目錄,如果有其他你暫時(shí)不需要注冊(cè)的目錄竹伸,也可以放進(jìn)來(lái)
val ignoreDirs = arrayListOf(
".gradle",
".idea",
"gradle"
)
// 遍歷子目錄
dirs.filter { file -> file.isDirectory && !ignoreDirs.contains(file.name) }
.forEach { dir ->
// 查找有沒(méi)有文件是 build.gradle 或 build.gradle.kts 的文件
val isModule = (dir.listFiles() ?: return@forEach)
.any { file -> !file.isDirectory && moduleFlags.contains(file.name) }
if (isModule) {
// 如果有泥栖,則把這個(gè)模塊注冊(cè)進(jìn)來(lái)
val moduleName = dir.name
println("注冊(cè)模塊:$moduleName")
include(":$moduleName")
}
}
}
代碼非常簡(jiǎn)單簇宽,如果有需要引入外部目錄作為模塊的,那個(gè)還是按以前的方法吧吧享;這里一并記錄下引入外部目錄作為模塊的兩種方式魏割,同樣,使用kotlin腳本钢颂,因?yàn)橐彩窃?code>settings.gradle.kts中注冊(cè)的
// 需要引入的外部模塊名稱(chēng)
include(":xx")
// 方式一:相對(duì)目錄
project(":xx").projectDir = File(settingsDir,"與當(dāng)前目錄的相對(duì)路徑")
// 方式二:使用絕對(duì)路徑
project(":xx").projectDir = File("模塊目錄的絕對(duì)路徑")
補(bǔ)充:2021-05-31
朋友反饋說(shuō)對(duì)kotlin不熟悉钞它,希望提供個(gè)groovy版本的,下面放出groovy版本
注:settings.gradle
與 settings.gradle.kts
保留一個(gè)即可
settings.gradle
rootProject.name = "Arto"
autoRegisterModule()
// 自動(dòng)注冊(cè)當(dāng)前所有子目錄下的模塊
def autoRegisterModule() {
def moduleSymbol = ["build.gradle", "build.gradle.kts"]
// 忽略的目錄殊鞭,如果有不想自動(dòng)注冊(cè)的目錄也可以放進(jìn)來(lái)
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()
// 是模塊遭垛,可以注冊(cè)
println "注冊(cè)模塊:$modelName"
include(":$modelName")
}
}
}
}
同樣外部模塊引用代碼
// 方式一:相對(duì)目錄
project(":xx").projectDir = new File(settingsDir,"與當(dāng)前目錄的相對(duì)路徑")
// 方式二:使用絕對(duì)路徑
project(":xx").projectDir = new File("模塊目錄的絕對(duì)路徑")
打完收工!