mvn eclipse:eclipseでコンパイルが通らなくなってしまった

気づいたら、mvn eclipse:eclipseで生成される.classpathでコンパイルが通らなくなってしまった。

Mavenでこういう、ある日突然挙動が変わった現象が発生したら、Mavenのpluginがバージョンアップしたことによる影響の可能性がかなり高い。

Mavenのpluginは、タグで明示的にバージョン番号を指定しないと、最新バージョンが存在すると自動的にバージョンアップするんですよね。なので、突然動かなくなったりする。影響を受けないように、本来はバージョン番号を指定しておくのがいいです。

今回も原因はやはりそうで、maven-eclipse-pluginのバージョンが2.5.1 -> 2.6に上がったことによる影響でした。

2.6の変更点一覧を見てみると、MECLIPSE-437が影響してそうである。

どうも、JDKのライブラリ(org.eclipse.jdt.launching.JRE_CONTAINER)の設定順序が.classpathのエントリの一番下になったっぽい。そのため、JDKに含まれるクラスと同じクラスを持つJARファイルが存在する場合、JDKより優先されてしまう(今までは逆だった)。で、もしクラスの内容が異なると、コンパイルエラーになったりします。

とりあえず今回は、maven-eclipse-pluginを2.5.1で固定にして対応しましたが、重複クラスがある状態なので本当はよろしくないですね。依存JARを一度見直した方がいいかなー。