gpt4 book ai didi

java - 尝试启动 osgi 包时发生 BundleException

转载 作者:行者123 更新时间:2023-12-04 20:44:19 25 4
gpt4 key购买 nike

我正在尝试从文件系统中的 osgi jar 安装并启动一个包

Bundle bundle = context.installBundle("reference:file:" + fullPath);
bundle.start();

它适用于另一个简单的包,但另一个更复杂的包有

Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"

在 list 中

这会导致以下异常

(org.osgi.framework.BundleException) org.osgi.framework.BundleException: Unresolved constraint in bundle
Unable to resolve 42.0: missing requirement [42.0] osgi.ee; (&(osgi.ee=JavaSE)(version=1.8))

如何将此功能添加到我的项目中?还有我如何从其他项目中删除这个要求?

我发现的所有类似问题都没有回答我的问题

在此先感谢您的任何回答并帮助我不拔头发:)

编辑:

正如 christian 所建议的,我尝试在 netbeans 中找到 felix 的配置,因为 felix 框架是由 netbeans 加载的。我在 maven POM 文件中找到了一些配置,但无法使用 christian 提到的“org.osgi.framework.system.capabilities”框架属性,我在文档中找不到。我正在悬赏,因为这对我来说非常重要,并且是唯一阻止我使用 OSGi 的事情,据我所知

最佳答案

您确定的能力:

Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"

osgi.ee 命名空间的要求。这是为您的框架定义执行环境的 namespace 。过滤器然后说您需要执行环境为 JavaSE,并且您需要版本属性为 1.8。这(不出所料)对应于 Java SE 8。

正如其他人所指出的,此功能应由 OSGi 框架提供。你应该不需要做任何事情来实现它。不存在此功能的主要原因有两个。

  1. 您使用的是较旧的或非 SE 版本的 Java。如果您的 NetBeans 启动配置未使用 Java 8 安装,则很容易发生这种情况。

  2. 您正在使用不理解"new"Java 版本的 Felix 框架。这可能是因为您的 Felix 框架很旧(最新版本是 5.6.4)或者因为您的 Java 版本非常新(您使用的是预发布的 Java 9 构建吗?)。

如果您可以在 Java 8 之上运行一个新的 Felix 框架,这确实应该可以。您有关于您的环境的更多详细信息吗?

编辑:

可以看到系统bundle提供的osgi.ee能力如下:

// Get the wiring for the system bundle
BundleWiring wiring = context.getBundle(0).adapt(BundleWiring.class);

// Get the osgi.ee capability for the system bundle
List<Capability> eecaps = wiring.getCapabilities("osgi.ee");

// There must be exactly one capability to show
System.out.println(eecaps.get(0).getAttributes());

关于java - 尝试启动 osgi 包时发生 BundleException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44630845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com