Gradleのideaプラグインで生成したideaプロジェクトにresourceフォルダを認識させたい。[deprecated]
環境
IDEAは2017.2.5でも確認。
目的
表題通り。gradle ideaで生成したファイルを使うとsrc/main/resourceがsourceフォルダとして認識されていたのが気になった。
調査
最初はIDEAプラグインの設定で出来るものと思っていた。 ……が、sourceとtestSourceの指定はあるがresourceの指定は無い……。
IdeaModule - Gradle DSL Version 2.2-20140924021627+0000
どうも、「IDEAはsourceとresourceの区別してなくね?」とのこと。
Support resource output directory configuration · Issue #1282 · gradle/gradle · GitHub
よろしい、ならば力技だ。
withXmlフックを使う。
IDEAのmoduleの管理はimlファイルがやっているらしい。
まずはGradleで生成したimlファイルとGUI上からresourceフォルダと認識させたimlファイルの差分を比較する。
IDEAから開くだけでも空白などの差分が出るが、目的の差分はシンプルだった。
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false"/>
↓
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
確かにさっきのissueの通り、GUI上の見た目は変わるが、xml要素としては同じものっぽい。
type属性に"java-resource"
がついていれば良さそう。
対処
ということでwithXmlフックを使ってtype属性に無理やり書き込む。
idea.module.iml { withXml { provider -> provider.node.component.content.sourceFolder .find { it.@url = 'file://$MODULE_DIR$/src/main/resources'}.@type = 'java-resource' } }
完全に力技。
これでGradleに生成させたファイルをIDEAで読み込むと無事resourceフォルダとして認識された。
あとがき
無理やりやったのでimlファイルの取扱が変わると問題が起こるかもしれません。