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.)
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
Możesz spróbować porównać wygenerowany plik MANIFEST.MF z wygenerowanym eksportem Eclipse. – Weibo