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を使う事も出来る。
この方法でもコンパイルが通るようになりました。

*1:Javaの仕様を調べていないので推測ですが・・・

*2:コードの変更に申請が要る、面倒な事になるのでGradleはこっそり使いたい・・・など