Gradle/Eclipseプラグインでビルドパスに他プロジェクトを追加
ここで書くのは、EclipseのGradleプラグインではなく、GradleのEclipseプラグインである。つまり、build.gradleの中の以下のことだ。
apply plugin: 'eclipse'
すべての投稿は/tag/gradle-eclipseにあるので参照されたい。
問題点
gradleのeclipseプラグインは非常に便利で、基本的にbuild.gradleに記述した通りにEclipseの環境、.projectと.classpathを自動的に設定してくれる。特に便利なのは、ビルドパスの自動設定だ。
しかし、開発段階でEclipseの他プロジェクトを参照したいとき、これを簡単に設定する方法が無い。つまり、以下をやりたいのだが、常に手で設定しなくてはいけない。
これは.classpathファイルに以下のように記述されるらしい。これをgradleに挿入させる方法は無いものか。
<classpathentry combineaccessrules="false" kind="src" path="/github_depDetect"/>
<classpathentry combineaccessrules="false" kind="src" path="/github_fxwrapper"/>
完全ではない一応の解決策
以下のようにする。他に使用している機能はコメントで示している
def addOtherProjects = { cp->
['/github_depDetect', '/github_fxwrapper'].each{
cp.entries.add(
new org.gradle.plugins.ide.eclipse.model.SourceFolder(it, null)
)
}
}
eclipse {
classpath {
//downloadSources=true
file {
whenMerged {cp->
//removeDuplicatedSources(cp)
//removeOutputFoldersForSourceFolders(cp)
//removeAllExcludes(cp)
addOtherProjects(cp)
}
}
}
}
一応はビルドパスに入れてくれるのだが、しかし以下の状態になる。
<classpathentry kind="src" path="/github_depDetect"/>
<classpathentry kind="src" path="/github_fxwrapper"/>
「combineaccessrules=”false”」が抜けているのだ。
combineaccessrulesとは何か?
これはビルドパスの設定で、以下のようにAccess rulesをダブルクリックし、出てきたダイアログにて「Combine rules with the access rules of the exported project entries」のチェックをはずすと表示されるらしい。
実際に片方についてチェックOFFしてみるとこうなる。
<classpathentry combineaccessrules="false" kind="src" path="/github_depDetect"/>
<classpathentry kind="src" path="/github_fxwrapper"/>
答えはWhat does combineaccessrules mean in Eclipse classpaths?にあった。
要するに、依存しているプロジェクトの中の使ってはいけないAPIを指定するものらしい。
例えば、プロジェクトAにプロジェクトBが依存しており、プロジェクトAの中のまだ開発中で不安定なAPIをBに使わせたくない場合に設定するというものらしい。