GradleのEclipseプラグインにモジュール対応させる
最新のGradle5.5になってもそのEclipseプラグインは、Eclipseクラスパス生成においてモジュール対応していないようだ。そこで、このEclipseの出力結果を変更して強制的に対応させることにする。
.projectにおけるフラグ
まず、モジュールとしてjarファイルを登録した場合に.projectファイルがどうなるかだが、以下のようになる。
<classpathentry kind="lib" path="....javax.ws.rs-api-2.1.1.jar" sourcepath="....javax.ws.rs-api-2.1.1-sources.jar">
<attributes>
<attribute name="module" value="true"/> <!-- これ -->
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
単にmodule=trueというフラグがつくだけである。
モジュール対応させる方法
How to set the module path (project Jigsaw) for eclipse projects via gradle?にやり方を説明している人がいた。
以下に転載しておく。
eclipse {
project {
natures 'org.eclipse.buildship.core.gradleprojectnature'
}
classpath {
file {
whenMerged {
entries.findAll { isModule(it) }.each { //(1)
it.entryAttributes['module'] = 'true'
}
entries.findAll { isSource(it) && isTestScope(it) }.each {
it.entryAttributes['test'] = 'true'
}
entries.findAll { isLibrary(it) && isTestScope(it) }.each {
it.entryAttributes['test'] = 'true'
}
}
}
defaultOutputDir = file('build')
downloadSources = true
downloadJavadoc = true
}
}
boolean isLibrary(entry) { return entry.properties.kind.equals('lib') }
boolean isTestScope(entry) { return entry.entryAttributes.get('gradle_used_by_scope').equals('test'); }
boolean isModule(entry) { isLibrary(entry) && !isTestScope(entry); }
boolean isSource(entry) { return entry.properties.kind.equals('src'); }