所変わればエラー変わる
NetBeans 6.0.1のプロジェクトにコンパイル済みの自作のアノテーションのクラスをライブラリィとして食わせると
Hoge.java:31: 注釈 com.hoge.FooAnotation に <clinit> がありません。
とエラーが出てそれ以上ビルドが進まない。
ひょっとして、属性のデフォルト値の設定に問題があるのか? でも一般的なビルドでもEclipseでもこんなエラー出たことないしな。
追記:
原因が判明した。やはり
アノテーションの属性には規定値(default)を設定するのだが、その規定値を定数とするために、内部にスタティックなフィールドを定義していたのだ。
@Documented
@Inherited
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface FooAnotation {
public static final int ITEMINDEX_NAN = -1;
〜
int ItemIndex() default ITEMINDEX_NAN;
当該の行を他の定数クラス等に移動するとビルドが通った。
さて、ここでEclipseのビルドとNetBeansのビルドで差が出たわけだが、NetBeansのビルドはjavacをAntタスクで起動しているだけなので、Eclipseのコンパイラが何か技を使っていると見るべきだろう。(javacのバグという確率も0%ではないが)
もし仮にEclipseのコンパイルが技を使っているとすれば、Eclipseでビルドしたクラスが他で動かないということになる訳で(事実NetBeansではビルドすら通らない)、とってもまずいと思うのだが。