运行一个包含在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

上一篇: Running a jar included in an OSGi bundle

下一篇: How to use OSGi services in Tapestry