可能重复:
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应用程序中使用泛型?
答案 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