我在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