我在Java應用程序和RCP應用程序之間有共同的代碼。所以,我創建了包含一個OSGi包:將OSGI包作爲傳統jar運行時出現NoClassDefFoundError
- 主類使用它作爲一個經典的罐子
- 一個OSGi清單以使用它在我的RCP應用
我建所有第谷Manifest-first,它工作正常,直到我需要在我的通用代碼中使用外部jar。
我需要使用jsch所以我必須添加jsch在我的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"
我建立我的第谷RCP應用程序和它的作品。但是,當我運行包純JAR與java -jar myjar.jar
,我得到以下錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: com/jcraft/jsch/JSchException
如果我導出我的包使用Eclipse,它的工作原理。所以我在我的tycho配置中有一個錯誤...
如何解決這個問題? Tycho是否存在與jar有關的依賴關係?這似乎並非如此 我錯過了什麼?
(我的配置的:Eclipse朱諾與M2E,第谷0.16.0,P2:朱諾,第谷:包裝>蝕-插件,目標平臺的配置:解析器= p2和pomDependencies =考慮。)
是的,我知道classpath。但是我需要一個完整的OSGI包,因爲Eclipse可以做到這一點。我只想爲命令行版本部署一個jar。如何用Tycho構建它? – cswormy
您可以嘗試比較您用eclipse導出生成的MANIFEST.MF文件。 – Weibo