古いGradleプロジェクトをEclipseで開いたら、クラスファイルの出力先が変わっているという相談を受け調べたのでメモ。
追記
Eclipse 2019-09だと、この方法が使えない模様。以下参照。
Eclipse 2019-09にしたらGradle(Buildship)でdefaultOutputDirの指定ができなくなった - 毎日へっぽこ
環境
Eclipse 2019-03、Buildship 3.0.1で確認。
状況
build.gradleには以下の記述で、ソースフォルダの出力先がclassesに指定してある。
eclipse {
classpath {
defaultOutputDir = file('classes')
}
}
古いEclipseだと、 classes
配下にclassファイルが出力されていたそうだが、Eclipse 2019-03を使うとメインの出力先が bin/main
、テストの出力先が bin/test
に変わっていた。
出力される .classpath
を見ると、 <classpathentry output="bin/main" kind="src" path="src/main/java">
のように、classpathentry
タグに output
属性が追加され、デフォルト出力先が上書きされている。
調査
issueがあった。
Gradleはソースフォルダの出力先を指定するようになったので、デフォルト出力先は使われなくなった模様。
出力先は固定で、変更したければ classpath.file.whenMerged
使えというのが残念。
プロパティ設定で変更できるように、というissueもあるけど、取り込まれてはいない模様。
対応
whenMerged
使わないといけないのはともかく、ソースフォルダごとに classes
を指定しないといけないのもいまいちと思っていたら、以下の記事を見つけた。
output
属性に null
を設定すると属性自体が消えるため、以下の記述でデフォルト出力先を有効にできた。
eclipse { classpath { defaultOutputDir = file('classes') file.whenMerged { entries.each { entry -> if (entry.kind == 'src' && entry.hasProperty('output')) { entry.output = null } } } } }
感想
Gradle、まだまだ枯れてないのかな?
このプロジェクトでは、ライブラリの依存性管理ツールとしてしか使われていなかった。Gradleを使う必要がなければ、枯れたMaven使っておくのが無難かと思う。