0

可能重复:
如何使用 OpenJDK 7 编译 mavenized OSGi 4.3 bundle?

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

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

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

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

4

1 回答 1

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编译器的目标版本“jsr14”与JDK7/8

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

于 2012-07-13T21:09:22.957 回答