2017-07-19 5 views
0

で、Eclipseのでコンパイル:使用することはありませんjavacの次のコードは、Eclipseでコンパイル

@Retention(RetentionPolicy.CLASS) 
@Target({ TYPE_USE }) 
public @interface Nullable { 
    // This is org.eclipse.jdt.annotation.Nullable 
} 

class SomeClass { 

    private final [email protected] Inner b; 

} 

が、それは、Oracleのjavacの(バージョン1.8としません。 0_141)、それは次のエラーを得られます。

SomeClass.java: error: annotation type not applicable to this kind of declaration 

それはコンパイルする必要があります(私はjavacのとEclipseのコンパイラはTYPE_USEの取り扱いに異なっていることを賭けるが、私のコードに注釈を保つように、私は回避策を見つけることができませんでしたEclipse内およびjavacを使用して)。この問題に関する手がかりは?

+0

'@Nullable SomeOtherClass.Inner b'は同じでコンパイルできませんか?これは私が見たことのない奇妙なコンストラクトです。 – Seelenvirtuose

+0

'@Nullable SomeOtherClass.Inner b'は(Eclipse Lunaを使用して)コンパイルされません。「静的メンバーへのアクセスに使用される型名に型名は使用できません。私が正しく覚えていれば、それは過去のある時点でコンパイルするために使用されていました。私たちはEclipseを更新するときに(Eclipseプラグインを開発する)奇妙な構文に切り替える必要がありました。 –

+0

あなたのコードは、import文や 'SomeOtherClass'の宣言などがないのでコンパイルされません。できればEclipseライブラリに依存せずにMWEを提供してください。欠落部分を追加するようにコードを拡張したとき、 'javac 1.8.0_131'でコンパイルされましたが、コードや環境に多少の違いがあります。 – mernst

答えて

0

Stephan Herrmannのおかげで、私は問題を発見しました。 javacビルドでは、META-INF/MANIFEST.MFファイルで宣言されているorg.eclipse.jdt.annotationのバージョン1.1.0を使用していました。しかし、このバージョンは間違っています。これは、Eclipseのコンパイラを使用しているときには検出されません。バージョンは2.0.0(Eclipse Lunaのjdtに同梱されています)でコンパイルされるためです。 javacビルドのバージョン2.0.0を指定すると、この問題が解決されました。

関連する問題