我在 Java 应用程序和 RCP 应用程序之间有通用代码。所以我创建了一个 OSGI 包,其中包含:
- 将其用作经典 jar 的主类
- 在我的 RCP 应用程序中使用它的 OSGi 清单
我首先使用 Tycho Manifest 构建了所有内容,并且它运行良好,直到我需要在我的公共代码中使用外部 jar。
我需要使用 jsch,所以我在 MANIFEST.MF 中添加了 jsch:
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"
我用 Tycho 构建了我的 RCP 应用程序,它可以工作。但是当我将捆绑包作为纯 JAR 运行时java -jar myjar.jar
,我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/jcraft/jsch/JSchException
如果我用 Eclipse 导出我的包,它可以工作。所以我的第谷配置有错误...
如何解决这个问题呢 ?Tycho 有依赖关系的 jar 吗?似乎不是这样 我错过了什么?
(我的配置:Eclipse Juno 与 m2e,Tycho 0.16.0,p2:Juno,Tycho:包装>eclipse-plugin,目标平台配置:resolver=p2 和 pomDependencies=consider。)