OSGi:Java 8 上缺少包 javax.security.auth

OSGi: missing package javax.security.auth on Java 8

我已经开始使用 Maven 3.3.3 和 NetBeans 8.1 在 Mac OS X El Capitan 上开发 OSGI 应用程序。目前,该应用包含两个最小的 OSGI 包。

如果编译选项设置为 JDK 1.7,应用程序编译并且 运行s OK。但是,对于 JDK 1.8,当应用程序为 运行 时,会生成一条消息抱怨缺少 java.security.auth,即使它包含在 JDK:

org.osgi.framework.BundleEx: Unresolved constraint in bundle net.winnall.categories.Core [5]: Unable to resolve 5.0: missing requirement [5.0] osgi.wiring.ception: Unresolved constraint in bundle net.winnall.categories.Core [5]: Unable to resolve 5.0: missing requirement [5.0] osgi.package; (&(osgi.wiring.package=com.thoughtworks.xstream)(version>=1.4.0)(!(version>=2.0.0))) [caused by: Unable to resolve 2.0:wiring.package; (&(osgi.wiring.package=com.thoughtworks.xstream)(version>=1.4.0)(!(version>=2.0.0))) [caused by: Unable to resol missing requirement [2.0] osgi.wiring.package; (osgi.wiring.package=javax.security.auth)])
ve 2.0: missing requirement [2.0] osgi.wiring.package; (osgi.wiring.package=javax.security.auth)]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
at java.lang.Thread.run(Thread.java:744)

我猜测 1.7 环境中 OSGI 友好的东西在 1.8 中缺失。

1.7 的版本信息是

java version "1.7.0_04-ea"
Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b12)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b15, mixed mode)

1.8 是

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

我正在使用 org.osgi.core-4.3.1.jar。我试过使用 5.0.0 和 6.0.0 版本,没有任何行为改变。

有人能帮帮我吗?

此致, 史蒂夫

您缺少包裹 "javax.security.auth"。这个包可能是 jre 的一部分。

OSGi 框架通常有一个称为系统包导出的配置列表。这些是框架从 jre 导出到 OSGi 的包。对于每个 jre 主要版本,此列表都是不同的。所以 jre 8 的系统包导出可能没有列出这个包。

那么你有两个选择。要么通过定义 framework property org.osgi.framework.system.packages.extra 来导出包。或者你安装一个包含并导出这个包的包。

你是哪个版本的 Felix 运行?

我刚刚在 Java 8 上测试了 Felix 运行 的最新版本,包 javax.security.auth 由系统包导出,这意味着它可以用于您的应用程序捆绑。

但是,如果您的 Felix 版本较旧,那么它可能早于 Java8,并且缺少该平台上可用 JRE 包的定义。