使用javac编译OSGI 4.2应用程序时,编译器不会看到泛型信息

时间:2012-07-13 18:38:17

标签: eclipse compiler-errors osgi javac

  

可能重复:
  How to compile mavenized OSGi 4.3 bundle with OpenJDK 7?

我不明白发生了什么,但我正在使用的最新OSGI库有关于服务定义等的泛型信息。当我针对这个库编写源代码时,我的IDE正确解释了泛型信息并让我编写代码。

但是当用javac编译代码时,会出现“类型ServiceFactory不接受参数”的编译错误。使用Eclipse编译器不会发生此错误(但IDEA 11中的Eclipse编译器似乎不喜欢新的JDK 7语言结构,如“new HashMap<>()”所以我不能真正将它用作更换)。

当我第一次研究这个问题时,我在某处读到了OSGI二进制jar的问题,因为类文件被编译为JDK 1.4二进制兼容性并且干扰了当保存的泛型信息时编译器加载了这个类。我不记得是不是因为我去寻找它时再也找不到那个网页了。

那么这里的交易是什么?为什么javac看不到OSGI 4.x类的泛型信息,所以我可以在OSGI应用程序中使用泛型?

1 个答案:

答案 0 :(得分:2)

我对Felix有这个问题,我认为对大多数osgi实现都是如此。问题是Java 7不再支持编译这些类的编译器标志。标志是-target jsr14。这允许编译器生成兼容Java 1.4的Java字节代码,但它也支持JSR14(泛型)的语言功能,这些功能在Java 1.5之前是不可用的。 OSGi使用它来支持许多绑定到1.4平台的用户。不幸的是,这个编译器标志随着Java 7的发布而消失了。

Felix人告诉我他们即将推出的下一个版本将与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