2014-02-17 3 views
0

Ситуация в том, что мне нужно упаковать запущенный банку X.jar в пакет OSGi. Сама банка не может быть изменена, и OSGi является обязательным, так как X.jar должен быть распределен и запускаться через программную программу, для которой требуются пакеты OSGi. Приложение, содержащееся в X.jar, предназначено для связи по сети с другим приложением.Запуск банки, включенной в комплект OSGi

Я планировал создать пакет 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.

ответ

2

Если вы хотите запустить его как внешний Java-процесс, вам нужно будет извлечь банку из своего пакета и указать на извлеченную банку. Ваше хранилище bundle data file является хорошим местом для извлечения пакета. Помещение банки на путь класса помогает только в том случае, если вы хотите загрузить классы непосредственно в свой активатор.

Смежные вопросы