0

重複の可能性:
Maven化されたOSGi 4.3バンドルをOpenJDK 7でコンパイルするには?

何が起こっているのかわかりませんが、私が使用している最新の OSGI ライブラリには、サービス定義などのジェネリック情報があります。このライブラリに対してソース コードを記述すると、IDE はジェネリック情報を正しく解釈し、コードを記述できるようにします。

しかし、javacでコードをコンパイルしようとすると、「type ServiceFactory does not take parameters」というコンパイルエラーが発生します。このエラーは、Eclipse コンパイラーを使用すると発生しません (しかし、IDEA 11 の Eclipse コンパイラーは、「new HashMap<>()」のような新しい JDK 7 言語構造を好まないように見えるため、実際には代替として使用できません。 )。

この問題を初めて調査していたとき、OSGI バイナリ jar に問題があり、クラス ファイルが JDK 1.4 バイナリ互換性のためにコンパイルされており、それがコンパイラのロード時に保持されているジェネリック情報に干渉していたことをどこかで読みました。クラス。それが正しいかどうかは覚えていません。なぜなら、その Web ページを探しに行ったときに再び見つからないからです。

それで、ここでの取引は何ですか?OSGI アプリケーションでジェネリックを使用できるように、javac が OSGI 4.x クラスのジェネリック情報を参照できないのはなぜですか?

4

1 に答える 1

2

私は Felix でこの問題を抱えていましたが、ほとんどの osgi 実装に当てはまると思います。問題は、Java 7 が、これらのクラスがコンパイルされたコンパイラ フラグをサポートしなくなったことです。フラグは -target jsr14 です。これにより、コンパイラは Java 1.4 と互換性のある Java バイト コードを生成できますが、Java 1.5 までは利用できなかった JSR14 (ジェネリック) の言語機能もサポートします。OSGi はこれを使用して、1.4 プラットフォームにバインドされている多くのユーザーをサポートします。残念ながら、このコンパイラ フラグは Java 7 リリースで消えてしまいました。

Felix 関係者は、彼らの差し迫った次のバージョンは Java 7 のコンパイラーと互換性があると私に言いました。

ここにいくつかの参照があります:

http://jcp.org/en/jsr/detail?id=14

JDK7/8 を使用した Java コンパイラのターゲット バージョン「jsr14」

http://markmail.org/search/?q=felix+jsr14+compile#query:felix%20jsr14%20compile+page:1+mid:vgkcr37jumvgpudz+state:results

于 2012-07-13T21:09:22.957 に答える