2012-12-13 83 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

相關問題