2

私は、mdlファイルからecoreモデルを作成したEMFプロジェクトに取り組んでいます。対応するgencoreファイルを作成し、gencoreファイルからコードを生成しました。EMFにはXMIに基づく独自のシリアル化メカニズムがありますが、独自のシリアル化メカニズムでプロジェクトをサポートしたいと思います。

これまでに必要な手順を実行しました。デバッガーを使用すると、対応するメソッドが呼び出されます。モデルのファイル表現を読み書きするために、外部ライブラリを使用したいと思います。私は次の手順を実行しました

  1. 外部ライブラリを配置したプラグインプロジェクトにディレクトリlib/を作成しました
  2. プロジェクトのビルドパスにライブラリを追加しました
  3. ディレクトリをbundle-classpath(Manifest.mf)に追加しました
  4. build.propertiesのbin.includesにディレクトリを追加しました

コードを実行しようとすると、NoClassDefFoundError例外が発生し、その理由がわかりません。プロジェクトをEclipseアプリケーションとして開始する実行構成を作成しました。だから誰かが私が欠けているものを知っていますか?

前もって感謝します!
マイケル

編集:私のManifest.mfファイルの下

Manifest-Version: 1.0  
Bundle-ManifestVersion: 2  
Bundle-Name: de.hs_rm.cs.vs.dsm.OWL  
Bundle-SymbolicName: de.hs_rm.cs.vs.dsm.owl;singleton:=true
Bundle-Version: 1.0.0  
Bundle-ClassPath: lib/,
 .
Bundle-Localization: plugin  
Bundle-RequiredExecutionEnvironment: JavaSE-1.6  
Export-Package: owl,  
 owl.impl,  
 owl.util,  
 rdfs,  
 rdfs.impl,  
 rdfs.util  
Require-Bundle: org.eclipse.core.runtime,  
 org.eclipse.emf.ecore;visibility:=reexport  
Bundle-ActivationPolicy: lazy  

そしてまた私のbuild.properties

bin.includes = .,\
               model/,\
               META-INF/,\
               plugin.xml,\
               plugin.properties,\
               lib/
jars.compile.order = lib/,\
                     .
source.. = src/
output.. = bin/
source.lib/ = lib/
jars.extra.classpath = lib/owlapi-bin.jar
4

3 に答える 3

1

問題が正確に何であるかを私はまったく知らないので、それは実際には100パーセントの解決策ではありません。誰かがまったく同じ問題を抱えているリンクを見つけました(ライブラリとしてjarを追加し、実行中にNoClassDefFoundError例外が発生しました)。これまでのところ、必要な手順は次のとおりです。

  1. 「インポート->ファイルシステム」を使用してJARをインポートします
  2. JARファイルをManifest/plugin.xmlランタイムタブのクラスパスセクションに追加します
  3. 「新規...」を押して「。」を追加します ライブラリをクラスパスに戻す
  4. バイナリビルドが[ビルド]タブで新しいJARファイルをエクスポートすることを確認します
  5. 保存を押します
  6. プロジェクトエクスプローラービューで対応するプロジェクトを選択し、右クリックして[PDEツール]->[クラスパスの更新]を選択します。これにより、新しく追加されたJARファイルがプロジェクトのクラスパスに追加されます。

プロジェクトのビルドパスに自分でライブラリを追加してから、最後のステップで問題が発生しました。この日食を行うたびに、「クラスパスの更新コマンド」の実行中にビルドパスからライブラリが削除されました。ライブラリを自分でビルドパスに追加せずに手順6を繰り返しましたが、現在は機能しています。

私には少し奇妙に思えますが、現在は機能しています。とにかく助けてくれてありがとう!

よろしく、マイケル

于 2010-09-15T14:58:15.407 に答える
0

プレーンな古いJavaプロジェクトではなくEclipseプラグインを作成している場合は、Manifest.mfエディターの[ランタイム]タブのクラスパスフィールドにライブラリを追加する必要があります。

于 2010-09-15T11:51:25.427 に答える
0

libにアクセスしようとしたとき、またはEcoreモデルにアクセスしようとしたときに、NoClassDefFoundErrorが発生しますか?後者の場合は、emfパッケージがplugin.xmlファイルに登録されているかどうかを確認してください。次の部分のようなものを探してください。

<extension point="org.eclipse.emf.ecore.generated_package">
  <package
       uri="«package URI here»"
       class="«package class name here»"
       genModel="«genmodel location here»"/>
</extension>

genmodelが生成に使用される前にplugin.xmlが生成された場合、マニフェストもplugin.xmlもコード生成プロセス中に更新されないため、この部分が欠落している可能性があります。

一方、アクセスしているライブラリが例外をスローした場合は、依存関係を削除して再度追加するか、プロジェクトをクリーンビルドしようとしますが、これらで例外が解決される可能性は低いようです。

于 2010-09-15T13:00:42.217 に答える