我试图安装&从文件系统中的osgi jar开始一个包
Bundle bundle = context.installBundle("reference:file:" + fullPath);
bundle.start();
它适用于另一个简单的捆绑包,但另一个更复杂的捆绑包
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
在其清单
中这会导致以下异常
(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文件中找到了一些配置,但是无法使用" org.osgi.framework.system.capabilities"基督徒提到的框架属性,我在文档中找不到。 我正在给予赏金,因为这对我来说非常重要,并且是我唯一阻止我使用OSGi的东西
答案 0 :(得分:3)
您确定的能力:
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
是osgi.ee
命名空间的要求。这是定义框架执行环境的命名空间。然后,过滤器表示您需要执行环境为JavaSE
,并且您需要将版本属性设置为1.8
。这(不出所料)对应于Java SE 8.
正如其他人所指出的,这种能力应该由OSGi框架提供。您不需要做任何事情来实现这一目标。这种能力不存在有两个主要原因。
您使用的是较旧版本或非SE版本的Java。如果NetBeans启动配置未使用Java 8安装,则很容易发生这种情况。
您正在使用不了解Java的“新”版本的Felix框架。这可能是因为您的Felix框架已经过时(最新版本为5.6.4
)或者因为您的Java版本非常新(您使用的是预发布的Java 9版本吗?)。
如果你可以在Java 8之上运行一个新的Felix框架,这真的应该正常工作。你有关于你的环境的更多细节吗?
编辑:
您可以看到系统包提供的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());
答案 1 :(得分:2)
这是一个需要由框架提供的功能。这意味着您的项目需要在Java 8上运行。
它在framework属性中配置:
org.osgi.framework.system.capabilities=osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8"
这就是说,例如,当您启动felix发行版时,已经配置了这个。
答案 2 :(得分:2)
这是已知的felix错误,已在2.0.4中修复。来自http://svn.apache.org/repos/asf/felix/releases/org.apache.felix.bundlerepository-2.0.10/doc/changelog.txt,
Changes from 2.0.2 to 2.0.4
---------------------------
** Bug
* [FELIX-3097] - LocalRepository is not updated when bundles are
* [FELIX-4571] - NullPointerException when using Repository impl with Aries subsystem impl
* [FELIX-4616] - BundleRepository ResourceComparator violates comparison contract
* [FELIX-4640] - missing (&(osgi.ee=JavaSE)(version=1.8)) when embedding in org.apache.felix.framework
** Improvement
* [FELIX-4812] - BundleRepository can be quite CPU intensive when starting a lot of bundles