2012-07-13 39 views
0

可能重複編譯一個OSGI 4.2應用程序時:
How to compile mavenized OSGi 4.3 bundle with OpenJDK 7?編譯器沒有發現泛型信息使用javac

我不明白髮生了什麼,但最新的OSGI庫我正在使用的服務定義等具有泛型信息。當我針對這個庫編寫源代碼時,我的IDE正確地解釋了泛型信息並讓我編寫我的代碼。

但是當它用javac編譯代碼時,會出現「類型ServiceFactory不帶參數」的編譯錯誤。使用Eclipse編譯器不會發生此錯誤(但IDEA 11中的Eclipse編譯器似乎不喜歡像「new HashMap <>()」這樣的新JDK 7語言結構,所以我不能真正將它用作替換)。

我在第一次研究這個問題的時候在某處讀到OSGI二進制jar有問題,因爲類文件是爲JDK 1.4二進制兼容性編譯的,而且這是干擾了正在保存的仿製信息當編譯器加載類時。我不記得是否正確,因爲當我去尋找它時我找不到那個網頁。

那麼這裏的交易是什麼?爲什麼javac不能查看OSGI 4.x類的泛型信息,因此我可以在OSGI應用程序中使用泛型?

+0

見http://stackoverflow.com/a/10917093/448551 – 2012-07-13 22:17:54

回答

2

我對Felix有這個問題,我認爲大多數osgi實現都是這樣。問題是Java 7不再支持編譯這些類的編譯器標誌。該標誌是-target jsr14。這允許編譯器生成與Java 1.4兼容的Java字節碼,但它也支持JSR14(泛型)的語言功能,這些功能在Java 1.5之前是不可用的。 OSGi使用它來支持綁定到1.4平臺的許多用戶。不幸的是,這個編譯器標誌隨Java 7版本消失。

菲利克斯人告訴我他們即將推出的下一個版本將與Java 7的編譯器兼容。

這裏有一些參考:

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

java compiler's target version "jsr14" with JDK7/8

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

相關問題