2012-12-13 22 views
5

Mam wspólny kod między aplikacją Java a aplikacją RCP. Więc stworzyliśmy pakiet OSGi, który zawiera:NoClassDefFoundError podczas uruchamiania pakietu OSGI jako klasyczny jar

  • głównym klasa go używać jako klasyczny słoik
  • manifeście OSGi go używać w mojej aplikacji RCP

I zbudował wszystko z Tycho Manifest-pierwszy i wszystko działało dobrze, dopóki nie potrzebowałem używać zewnętrznego słoja we wspólnym kodzie.

muszę korzystać jsch więc muszę dodać jsch w moim MANIFEST.MF:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Main-Class: mygroupid.Main 
Bundle-Name: Common tools 
Bundle-SymbolicName: common-tools 
Bundle-Version: 1.0.1.qualifier 
Export-Package: mygroupid, 
     mygroupid.tools 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Import-Package: org.osgi.framework;version="1.3.0" 
Require-Bundle: com.jcraft.jsch;bundle-version="0.1.46" 

zbudować mojej aplikacji RCP z Tycho i to działa. Ale kiedy uruchomić pakiet jako czysty słoik z java -jar myjar.jar, pojawia się następujący błąd:

Exception in thread "main" java.lang.NoClassDefFoundError: com/jcraft/jsch/JSchException 

Gdybym wyeksportować pakiet z Eclipse, to działa. Więc mam błąd w mojej konfiguracji tycho ...

Jak rozwiązać ten problem? Czy dla Tycho istnieje uzależnienie od słoików? Wygląda na to, że tak nie jest. Co przeoczyłem?

(Moja konfiguracja: Eclipse Juno z m2e, Tycho 0.16.0, p2: Juno, Tycho: pakowanie> eclipse-plugin, platforma docelowa konfiguracja: rezolwer = p2 i pomDependencies = rozważenia.)

Odpowiedz

0

jeśli pracujesz na platformie Linux/Unix, można spróbować java -classpath: myjar.jar com.yourpackage.mainclass

jeśli workin na platformie Windows, można spróbować java -classpath; myjar.jar com. yourpackage.mainclass

+0

Tak, znam ścieżkę klas. Ale potrzebuję kompletnego pakietu OSGI, jak to potrafi Eclipse. Chcę wdrożyć tylko jeden słoik dla wersji wiersza poleceń. Jak zbudować to z Tycho? – cswormy

+0

Możesz spróbować porównać wygenerowany plik MANIFEST.MF z wygenerowanym eksportem Eclipse. – Weibo

1

Po prostu dodaj maven-assembly-plugin do swojej kompilacji i t budować słoik ze wszystkimi zależnościami:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
</plugin> 

Alternatywnie, można również tworzyć zespół, gdzie słoje są packed individually. Musisz napisać własną assembly descriptor.