运行OSGI包作为经典jar时的NoClassDefFoundError

csw*_*rmy 5 java eclipse dependency-management tycho maven

我在Java应用程序和RCP应用程序之间有共同的代码.所以我创建了一个OSGI包,其中包含:

  • 一个主要类,用它作为经典的jar
  • 一个OSGi清单,可以在我的RCP应用程序中使用它

我用Tycho Manifest-first构建了所有内容,并且它工作正常,直到我需要在我的公共代码中使用外部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"
Run Code Online (Sandbox Code Playgroud)

我用Tycho构建我的RCP应用程序,它可以工作.但是当我将包作为纯JAR运行时java -jar myjar.jar,我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/jcraft/jsch/JSchException
Run Code Online (Sandbox Code Playgroud)

如果我用Eclipse导出我的包,它就可以了.所以我的tycho配置有错误...

如何解决这个问题呢 ?对Tycho有依赖的jar吗?似乎不是这样的我错过了什么?

(我的配置:带有m2e的Eclipse Juno,Tycho 0.16.0,p2:Juno,Tycho:打包> eclipse-plugin,target-platform-configuration:resolver = p2和pomDependencies =考虑.)

Wei*_*ibo 0

如果您在 Linux/Unix 平台上工作,您可以尝试 java -classpath :myjar.jar com.yourpackage.mainclass

如果您在 Windows 平台上工作,您可以尝试 java -classpath ;myjar.jar com.yourpackage.mainclass