2012-12-13 54 views
5

我在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 =考虑。)

回答

0

如果您正在使用的Linux/Unix平台,你可以尝试 的java -classpath:myjar.jar com.yourpackage.mainclass

,如果你在Windows平台上干活,你可以尝试 的java -classpath; myjar.jar融为一体。 yourpackage.mainclass

+0

是的,我知道classpath。但是我需要一个完整的OSGI包,因为Eclipse可以做到这一点。我只想为命令行版本部署一个jar。如何用Tycho构建它? – cswormy

+0

您可以尝试比较您用eclipse导出生成的MANIFEST.MF文件。 – Weibo

1

只需将maven-assembly-plugin添加到您的版本,然后le t将其打造一个罐子具有所有依赖性:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
</plugin> 

或者,你也可以创建一个组件,其中罐子packed individually。你需要为此编写自己的assembly descriptor

相关问题