緣起
之前一直用的是 eclipse,幾次(差不多有 3、4 次吧)想切換到 idea 這個傳說中的 IDE,不過一直被 Gradle 設置給打了回來。
這次幹活幹累了決定配置一下 idea 權當休閒,經過一番翻箱倒櫃,終於達到了自己滿意的效果。
Gradle 配合 Idea Module
先說一下我的項目結構,項目根目錄下只是一些 gradle 相關的配置文件,幾個子項目位於 projects 目錄下,並且 B 項目依賴 A,C 項目依賴 A 和 B。
在 idea 中新建項目(採用直接打開 build.gradle 模式)的時候,總是會把根目錄和 projects 目錄都作爲 module 呈現。
當然,這個作爲 idea 並無過錯,因爲 gradle 的理念如此。但不合我的理念。
放狗找了半天之後發現解決辦法:
在根目錄下的 build.gradle 的尾部增加如下代碼:
// 在idea 的 module 中忽略 projects 目錄
project("projects") {
ideaModule.enabled = false
}
/**
* idea 裏面忽略根項目,也就是說不將根項目設置爲 module
*/
gradle.projectsEvaluated {
gradle.rootProject {
ideaModule.enabled = false
idea {
project {
// modules = subprojects*.idea.module
// 如果某個子項目的 ideaModule 設置爲 false,則不會在 idea 中生成 module
def modulesToInclude = subprojects.findAll {it.ideaModule.enabled == true}
modules = modulesToInclude.idea.module
}
}
}
}
效果如下圖所示:
多 resources 目錄設置
另外一個問題是我的 web 項目裏面 main/resources 是分爲 3 個目錄的:
- resources: 通用設置,所有人一個樣
- resources-dev: 開發環境設置文件,每個開發人員可能都有所區別
- resource-prod: 生產環境下配置文件
打包的時候根據不同的命令來將不同目錄打入 war 包。
一開始用 Idea 打開項目的時候我時手工在 module 裏面設置 resources-dev 的,結果編譯的時候發現此目錄死活沒有發佈出去。
後來才發現需要在 gradle 設置裏面明確指定此目錄:
//
// 設置默認 resources 爲開發環境狀態
//
// 這兒如果不設置的話,idea 編譯時只會默認獲取 resources 目錄
//
sourceSets {
main {
resources {
srcDirs = ['src/main/resources', 'src/main/resources-dev']
}
}
}
Excluded 文件夾
一般項目下往往會有些不希望 IDE 處理的文件夾(例如 node_modules),在項目設置裏面可以在 Module 裏面 Excluded 這些文件夾,但是 gradle 一刷新,這些手工設置就沒了,所以還需要在 gradle 配置裏面加幾句話。
這些配置需要在子項目的 build.gradle 裏面設置:
注意 excludeDirs 後面是 +=, 這樣可以把 gradle idea 插件默認文件夾加上(其實也就是 build 和 .gradle 文件夾)。
idea {
module {
// idea Module 的忽略列表加入下面這些目錄
excludeDirs += [file('bin'), file('libs'), file('node_modules'), file('tools'), file('.settings')]
}
}
結語
這一通折騰花了我大半天時間——好吧,感覺更累了,爲了保留點勞動成果,我在 github 上創建了個示例項目(其實早就創建了,這次是大更新),有需要的可以參考一下,起碼可以少走點彎路。
over!!!