IDEA 13、14 配合 gradle 時候無法正確編譯資源文件的 bug

問題說明

IDEA 確實是個折騰人的玩意,沒想到在最基本的編譯環節居然也能遇到問題。

此次配置一個單module 的項目,使用的是 gradle 導入項目,沒想到發現編譯之後允許某個單元測試的時候出錯了,到 build 目錄一看,感情是 resources 目錄下的配置文件都沒用拷貝過來,只有一堆的 class package。

Google 一圈發現這是 IDEA 的 bug,不過官方 issue 裏面不願意承認是 bug:

IDEA-128273 Resource folders drop out of junit test classpath after a while for Gradle based project

這個問題據說也牽連到了 Android Studio。

官方提供的解決辦法

給出的解決辦法是在 gradle 的 IDEA 配置中增加一行:

idea {
    module {
        inheritOutputDirs = true
    }
}

也就是說默認採用項目的編譯輸出路徑:

項目輸出設置

這時候還需要注意一點,儘量不要手賤(例如我),在這兒又設置了下項目名稱:

idea {
    module {
        name = "XXOO"
        inheritOutputDirs = true
    }
}

這麼搞的話輸出又會出現問題了,奶奶的,IDEA 你還敢說這不是你們的 bug,起碼是處理不嚴謹吧!!!

** :exclamation: 另外採用這種辦法的話,需要刪除項目下的 IDEA 相關配置文件,然後重新導入。**

民間智慧

stackoverflow 發現的解決辦法 是在 gradle 中多配置個 Task:

task copyTestResources(type: Copy) {
    from "${projectDir}/src/test/resources"
    into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResources

意思很簡單,就是在處理 Test 資源的時候將這些 resources 下的文件拷貝到相應的 build 下。

不過這種方法有點麻煩,單項目比較簡單,直接用就行了,但是如果是多 module 的話還得進行相應處理。

結論

這個無論如何我覺得都算是 IDEA 的bug 了,不過目前既然有了解決方案起碼不算是太影響幹活。

另外推薦採用官方提供的解決方案,相對來說省事,也能順便解決多 module 的問題。

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