2012-12-13 9 views
5

JavaアプリケーションとRCPアプリケーションの間に共通のコードがあります。OSGIバンドルを従来のjarファイルとして実行しているときにNoClassDefFoundError

  • メインクラスは、私はティコですべてを建て

私のRCPアプリケーションでそれを使用するために、古典的な瓶

  • としてのOSGiマニフェストをそれを使用する:だから私は含まれていOSGiバンドルを作成しましたマニフェスト・ファーストで、共通のコードで外部のjarファイルを使用する必要があるまでうまくいきました。

    私はそう、私は私のMANIFEST.MFにJSCHを追加している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" 
    

    私はティコと私のRCPアプリケーションを構築し、それが動作します。私はjava -jar myjar.jarと純粋なJARとしてバンドルを実行したときしかし、私は次のエラーを取得する:私は、Eclipseでの私のバンドルをエクスポートする場合

    Exception in thread "main" java.lang.NoClassDefFoundError: com/jcraft/jsch/JSchException 
    

    、それが動作します。だから私のタイコの設定に誤りがある...

    この問題を解決するには? Tychoには依存関係がありますか?それは事実ではないようです。 私が逃したことはありますか?

    (私の設定:M2eを持つEclipseのジュノ、ティコ0.16.0、P2:ジュノ、ティコ:パッケージ>日食・プラグイン、ターゲット・プラットフォームの構成:リゾルバ= P2とpomDependencies =は考える。)

  • 答えて

    0

    場合あなたは、Linux/UNIXプラットフォーム上で作業している、あなたは のjava -classpath試すことができます。myjar.jar com.yourpackage.mainclass

    を使用すると、Windowsプラットフォーム上で働いている場合、あなたは のjava -classpathを試すことができます。myjar.jarコム。 yourpackage.mainclass

    +0

    はい、私はクラスパスを知っています。 Eclipseができるように、完全なOSGIバンドルが必要です。私は、コマンドラインバージョン用に1つのjarファイルのみをデプロイしたい。ティコと一緒にそれを作る方法? – cswormy

    +0

    生成したeclipseエクスポートで書いたMANIFEST.MFを比較しようとすることができます。 – Weibo

    1

    maven-assembly-pluginをビルドに追加するだけで、それはすべての依存関係を持つjarファイルを構築T:

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

    、あなたはまた、jarがpacked individuallyあるアセンブリを作成することができます。このためには独自のassembly descriptorを作成する必要があります。

    関連する問題