运行一个包含在OSGi包中的jar
情况是我需要将可运行jar,X.jar打包到OSGi包中。 jar本身不能修改,OSGi是强制性的,因为X.jar是通过一个需要OSGi bundle的软件程序来分发和运行的。 包含在X.jar中的应用程序是通过网络与另一个应用程序进行通信。
我的计划是用eclipse创建一个OSGi包,然后在其中包含X.jar。 但问题是X.jar没有被检测到。 如果我尝试在我的文件系统上访问X.jar的副本,它就会起作用。 我的包文件结构:
-MyBundle
-META-INF
-MANIFEST.MF
-src
-mybundle
-Activator.class
-X.jar
激活:
public void start(BundleContext context) {
Thread XThread = new Thread(){
public void run(){
try {
Runtime.getRuntime().exec("java -jar X.jar");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}
的Manifest.MF
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Bundle
Bundle-SymbolicName: myBundle
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.ericsson.mas.Activator
Bundle-ClassPath: .,X.jar
Bundle-Vendor: BundleVendor
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.osgi.framework;version="1.3.0"
我怀疑我的Bundle-ClassPath存在一些问题,但是当我四处搜索时似乎是正确的。 任何帮助是极大的赞赏。
注意:我知道这完全违背了OSGi的哲学。
如果你想运行它作为一个外部java进程,你需要从你的bundle中提取jar并指向解压缩的jar。 您的捆绑包数据文件存储是抽取捆绑包的好地方。 将jar放在类路径中只有在你想直接在你的激活器中加载类时才有用。
链接地址: http://www.djcxy.com/p/74727.html