无法将 bndtools 插件用于 运行 一个简单的 osgi 应用程序
can't use bndtools plugin to run a simple osgi application
我正在尝试 运行 使用本教程中概述的过程制作一个简单的应用程序:BndTools tutorial project。
这是我正在尝试加载的 osgi project/module。
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 class.
包的 bnd.bnd 文件
Bundle-Version: 0.0.0.${tstamp}
Private-Package: \
com.counter
Bundle-Activator: com.counter.BundleCounterActivator
我正在尝试将此包上传到教程中定义的 'run 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'(或者更确切地说,给定 [=43= 中教程项目的 felix osgi 运行time 环境设置])?感谢任何帮助。
以下是所涉及步骤的屏幕截图:
1) 给定 'run.bndrun' 文件
2) 添加捆绑要求
3) 我在尝试添加时遇到错误 'BundleCounter'
当 bndtools 尝试解析 bnd运行 文件时,它会查询配置的存储库以获取满足您的 运行 要求所需的功能。它以递归方式执行此操作,因此在本例中会发生以下情况:
- 满足您对 BundleCounter bundle 的要求
- 它找到 BundleCounter 包,发现 BundleCounter 需要版本
[1.8,2)
的 org.osgi.framework
包(即至少 1.8 但低于 2.0)
- 找不到
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 的语义版本控制意味着您知道何时会发生重大更改,并且选择尽可能低的版本可为您提供最大的互操作性。
我正在尝试 运行 使用本教程中概述的过程制作一个简单的应用程序:BndTools tutorial project。
这是我正在尝试加载的 osgi project/module。
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 class.
包的 bnd.bnd 文件Bundle-Version: 0.0.0.${tstamp}
Private-Package: \
com.counter
Bundle-Activator: com.counter.BundleCounterActivator
我正在尝试将此包上传到教程中定义的 'run 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'(或者更确切地说,给定 [=43= 中教程项目的 felix osgi 运行time 环境设置])?感谢任何帮助。
以下是所涉及步骤的屏幕截图:
1) 给定 'run.bndrun' 文件
2) 添加捆绑要求
3) 我在尝试添加时遇到错误 'BundleCounter'
当 bndtools 尝试解析 bnd运行 文件时,它会查询配置的存储库以获取满足您的 运行 要求所需的功能。它以递归方式执行此操作,因此在本例中会发生以下情况:
- 满足您对 BundleCounter bundle 的要求
- 它找到 BundleCounter 包,发现 BundleCounter 需要版本
[1.8,2)
的org.osgi.framework
包(即至少 1.8 但低于 2.0) - 找不到
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 的语义版本控制意味着您知道何时会发生重大更改,并且选择尽可能低的版本可为您提供最大的互操作性。