我正在尝试在 OSGi 容器中安装 OSGi 包。我的一个文件夹中有一个 jar 文件。我将该 jar 文件读入ByteArray
,然后我使用它在 OSGi 容器中ByteArray
安装包。Framework
下面是代码..
FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next();
framework = frameworkFactory.newFramework(new HashMap<String, String>());
framework.start();
final String basePath = "C:\\LocalStorage";
final BundleContext bundleContext = framework.getBundleContext();
final List<Bundle> installedBundles = new LinkedList<Bundle>();
String filename = "Framework" + "-" + "1.0.0" + ".jar";
String localFilename = basePath+ File.separatorChar + filename;
File file = new File(localFilename);
byte [] fileData = new byte[(int)file.length()];
DataInputStream dis = new DataInputStream((new FileInputStream(file)));
dis.readFully(fileData);
dis.close();
// But below line gives me exception always-
installedBundles.add(bundleContext.installBundle(filename, new ByteArrayInputStream(fileData)));
for (Bundle bundle : installedBundles) {
bundle.start();
}
以下是例外,我总是得到 -
org.osgi.framework.BundleException: Bundle symbolic name and version are not unique: Framework:1.0.0
谁能告诉我我做错了什么?而且我需要使用 ByteArray,因为在另一个类中的一些代码中,我使用的是 ByteArray,所以我需要将 jars 文件的 ByteArray 传递给这些方法。
更新:-
但是如果我像这样安装它,那么它工作正常。如果我通过 ByteArray 安装它,它不起作用..
final String basePath = "C:\\LocalStorage";
final BundleContext bundleContext = framework.getBundleContext();
final List<Bundle> installedBundles = new LinkedList<Bundle>();
String filename = "Framework" + "-" + "1.0.0" + ".jar";
String localFilename = Constants.FILE_PROTOCOL + basePath+ File.separatorChar + filename;
installedBundles.add(bundleContext.installBundle(localFilename));
for (Bundle bundle : installedBundles) {
bundle.start();
}
我可能在 ByteArray 上做错了什么?任何想法?