2014-02-17 91 views
0

这种情况是我需要将可运行的jar包X.jar打包到OSGi包中。 jar本身不能修改,OSGi是强制性的,因为X.jar是通过一个需要OSGi bundle的软件程序来分发和运行的。包含在X.jar中的应用程序是通过网络与另一个应用程序进行通信。运行OSGi包中包含的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" 

我怀疑是有一些问题,我的包,CLASSPATH中,但它似乎是正确的,当我四处搜寻。任何帮助是极大的赞赏。

注意:我知道这完全违背了OSGi的哲学。

回答

2

如果你想运行它作为一个外部java进程,你将需要从你的bundle中提取jar并指向解压缩的jar。您的bundle data file存储空间是抽取捆绑包的好地方。将jar放在类路径中只有在你想直接在你的激活器中加载类时才有用。