gpt4 book ai didi

java - 无法使用 bndtools 插件运行简单的 osgi 应用程序

转载 作者:行者123 更新时间:2023-12-01 11:14:43 25 4
gpt4 key购买 nike

我正在尝试使用本教程中概述的过程运行一个简单的应用程序:BndTools tutorial project .

这是我正在尝试加载的 osgi 项目/模块。

package com.counter;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleEvent;
import org.osgi.framework.BundleListener;

public class BundleCounterActivator implements BundleActivator,
BundleListener{

private BundleContext context;

public void start(BundleContext context) throws Exception{
this.context=context;

context.addBundleListener(this);
printBundleCount();
}

public void stop(BundleContext context)throws Exception{
context.removeBundleListener(this);
}

public void bundleChanged(BundleEvent event){

switch(event.getType()){

case BundleEvent.INSTALLED:
System.out.println("Bundle Installed");
printBundleCount();
break;

case BundleEvent.UNINSTALLED:
System.out.println("Bundle Uninstalled");
printBundleCount();
break;
}
}

private void printBundleCount(){
int count=context.getBundles().length;
System.out.println("There are currently" +count+ " bundles");
}
}

这是我为包含 BundleCounterActivator 类的包提供的 bnd.bnd 文件。

Bundle-Version: 0.0.0.${tstamp}
Private-Package: \
com.counter
Bundle-Activator: com.counter.BundleCounterActivator

我正在尝试将此 bundle 上传到教程中定义的“运行 bundle ”配置。但是,我收到以下错误:

Unable to resolve BundleCounter version=0.0.0.201508121544:
missing requirement Require[osgi.wiring.package]{}{filter=(&(osgi.wiring.package=org.osgi.framework)

我的问题:如何安装该项目缺少的包:“org.osgi.framework”(或者更确切地说,给定链接中教程项目的 felix osgi 运行时环境设置)?如有任何帮助,我们将不胜感激。

以下是所涉及步骤的屏幕截图:

1) 给定“run.bndrun”文件 Given run.bndrun

2) 添加捆绑要求 enter image description here

3) 尝试添加“BundleCounter”时出现错误 enter image description here

最佳答案

当 bndtools 尝试解析 bndrun 文件时,它会查询配置的存储库以获取满足您的运行要求所需的功能。它递归地执行此操作,因此在这种情况下会发生以下情况:

  1. 它满足您对 BundleCounter bundle 的要求
  2. 它找到 BundleCounter 包,并发现 BundleCounter 需要 [1.8,2) 版本的 org.osgi.framework 包(即至少 1.8 但更低)大于 2.0)
  3. 它无法找到 org.osgi.framework 的任何提供者,并向您报告失败情况。

现在org.osgi.framework是OSGi核心规范的主要包,并且始终由OSGi框架提供。该软件包的版本 1.8 对应于 OSGi Release 6 (JavaDoc here) ,这是该规范的最新版本。为了满足它,您需要最新版本的 Eclipse Equinox 或 Apache Felix。从第一张图片中我可以看到您正在使用 Apache Felix,但看不到您选择的版本。

要使解析操作正常工作,有两种选择。您要么需要一个可以提供 1.8 版本 OSGi API 的框架,要么需要降低所依赖的 API 版本。

如果您想获得兼容 OSGi Release 6 的 Felix,我建议使用 here 中的最新版本 5.0.1 。您需要将其添加到本地存储库,以便解析器能够获取它。

降低 API 依赖项的版本也非常容易。您只需要将 osgi.core 的构建依赖版本减少到低于 6 的版本即可。我不会低于 4.3.1,因为那时 API 中引入了泛型, 5 是我的首选。

一般来说,最好使用您可以使用的最低版本的 API。 OSGi 的语义版本控制意味着您知道何时发生重大更改,并且选择尽可能最低的版本可以为您提供最大的互操作性。

关于java - 无法使用 bndtools 插件运行简单的 osgi 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31974636/

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