ECJ (Eclipse Compiler for Java) とjavacでimport文の処理が違う
タイトル通りだけど、「Eclipseだとコンパイルエラーが出ないのに、なぜかGradleだとコンパイルエラーになる」という状況にハマったので、メモ。
サンプルコード
1. 下記のようなシンプルなコードを作成して、helloworld.jarを作成する。
package helloworld.model; public class HelloWorld { }
2. 別プロジェクトにhelloworld.jarを追加し、下記のようなコードを作成する。
package sinsoku.app; import helloworld.*; public class Client { }
この状態で、Eclipse上で見ると画像のように特にエラーは出ない。
しかし、javac.exeでコンパイルすると、下記のエラーが出る。
どうもimport文の"helloworld.*"にクラスが一つも無いのが良くないっぽい*1。
解決する方法は?
下記のようにimport文を修正する事でコンパイル出来るようになった。
package sinsoku.app; - import helloworld.*; + import helloworld.model.*; public class Client { }
別解
政治上の理由*2で、既存のコードを変更出来ない場合はGradleでECJを使う事も出来る。
この方法でもコンパイルが通るようになりました。
- xinthink/gradle-ecj - GitHub https://github.com/xinthink/gradle-ecj