Idea 配合 Gradle 多項目管理

緣起

之前一直用的是 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 的,結果編譯的時候發現此目錄死活沒有發佈出去。

Module 設置

後來才發現需要在 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 上創建了個示例項目(其實早就創建了,這次是大更新),有需要的可以參考一下,起碼可以少走點彎路。

gradle-multi-project-example

over!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章