問題說明
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 的問題。