0

ApacheFelixで小さなEMFベースのアプリケーションを実行しようとしています。FelixはAndroidデバイスで実行されています。私はEclipseを使用していますが、bndとmavenはありません。

次のパッケージをエクスポートするEMFバンドルを入手しました。

org.eclipse.emf.common_droid-2.7.0.v20120127-1122.jar
org.eclipse.emf.ecore_droid-2.7.0.v20120127-1122.jar
org.eclipse.emf.ecore.xmi_droid-2.7.0.v20120127-1122.jar

プラグインの構造-プロジェクト:

[+] src
---> com.androidosgi.notifier
---> com.androidosgi.notifier.notification
---> com.androidosgi.notifier.notification.impl
---> com.androidosgi.notifier.notification.util
[+] META-INF
---> MANIFEST.MF
Notification-1.0.ecore
Notification-1.0.ecorediag
Notification-1.0.ecorert
NotificationComponent.xmi

アクティベーターはcom.androidosgi.notifierにあります。

MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Notification Testing
Bundle-SymbolicName: com.androidosgi.notifier
Bundle-Version: 12.6.5
Bundle-Activator: com.androidosgi.notifier.Activator
Bundle-Vendor: Homer Simpson
Import-Package: 
 com.androidosgi.notifier.notification,
 com.androidosgi.notifier.notification.impl,
 com.androidosgi.notifier.notification.util,
 org.eclipse.emf.common,
 org.eclipse.emf.common.archive,
 org.eclipse.emf.common.command,
 org.eclipse.emf.common.notify,
 org.eclipse.emf.common.notify.impl,
 org.eclipse.emf.common.util,
 org.eclipse.emf.ecore,
 org.eclipse.emf.ecore.impl,
 org.eclipse.emf.ecore.plugin,
 org.eclipse.emf.ecore.resource,
 org.eclipse.emf.ecore.resource.impl,
 org.eclipse.emf.ecore.util,
 org.eclipse.emf.ecore.xmi,
 org.eclipse.emf.ecore.xmi.impl,
 org.eclipse.emf.ecore.xmi.util,
 org.eclipse.emf.ecore.xml.namespace,
 org.eclipse.emf.ecore.xml.namespace.impl,
 org.eclipse.emf.ecore.xml.namespace.util,
 org.eclipse.emf.ecore.xml.type,
 org.eclipse.emf.ecore.xml.type.impl,
 org.eclipse.emf.ecore.xml.type.internal,
 org.eclipse.emf.ecore.xml.type.util,
 org.osgi.framework;version="1.3.0"
Bundle-ClassPath: .
Export-Package: com.androidosgi.notifier;x-internal:=true,
 com.androidosgi.notifier.notification;x-internal:=true,
 com.androidosgi.notifier.notification.impl;x-internal:=true,
 com.androidosgi.notifier.notification.util;x-internal:=true

バンドルをOSGiにインストールする前に、それを「デックス」し、classes.dexをバンドルに追加しました。

開始しようとすると、次のようになります:NoClassDefFoundError ここに画像の説明を入力してください

アイデアや解決策はありますか?:) ありがとう

4

3 に答える 3

0

EMFは、Felix、またはEquinox以外のOSGiフレームワークでは実行されません。私がずっと前にこれについて提起した次のバグを参照してください:https ://bugs.eclipse.org/bugs/show_bug.cgi?id = 328227

OSGi宣言を適切に行うEMFの再パッケージ化を使用する必要があります。これはGitHubにありますが、現在は少し古くなっています。つまり、古いバージョンのEMFがパッケージ化されています。参照:https ://github.com/njbartlett/emf-osgi

更新:私は速すぎた、それはおそらく正しい答えではなかった。すでにEMFを再パッケージ化したようです。

答えは、パッケージcom.androidosgi.notifier.notificationとそのサブパッケージをインポートしていることだと思いますが、それらはおそらくバンドル内のパッケージです。実際にバンドルの一部であるパッケージをインポートしないでください。

于 2012-06-05T20:01:22.940 に答える
0

明らかなことをすでに確認していると思います。*クラスNotificationFactoryがバンドル内に存在します*名前とパスにタイプミスがありません*クラスがそのような内部jarまたはsmthにありません*アクティベーターが正常に検出されましたシステム?*インポートを削除しようとしましたか?

私がチェックすることを提案できる唯一のもっと奇妙なことは、おそらく問題がNotificationFactory自体にあるのではなく、それが使用するいくつかのクラスにあるのかどうかです。ClassNotFoundが実際に報告されたクラス内の別のクラス用であった他のセットアップで、このようなケースがありました。

たとえば、com.androidosgi.notifier.notificationパッケージ内のアクティベーターを移動してみてください。これは、アクティベーターが見つかるかどうかを確認するのと同じです。このようにして、問題がパッケージにあるのか、クラス自体にあるのかがわかります。

于 2012-06-06T07:39:45.263 に答える
0

OK 50%完了です;-)コンピューター(Java 1.6)で実行されています(ただし、Androidでは実行されていません)。私の場合、バージョン管理機能が不足しているために発生したNoClassDefFoundErrorエラー。エクスポートするEMF-Bundle(b1)のすべてのパッケージにバージョンを追加しました。また、インポートするNotifier-Bundle(b2)で、すべてのパッケージにバージョン範囲を追加しました。それはバージョンを設定するために非常に重要であるように見えます。 私も削除しました:

com.androidosgi.notifier.notification、com.androidosgi.notifier.notification.impl、com.androidosgi.notifier.notification.util、

Bundle(b2)のインポートから、および(b2)からのすべてのエクスポートから。現在、ApacheFelixで実行されています。

ええと、私も追加しました

Import-Package:org.xml.sax.helpers; version = "[0.0.0.1_006_JavaSE、3.0.0)"

バンドル(b1)のマニフェストであるEMFバンドルに。

私の次の問題は、Androidの標準システムバンドルのエクスポートが通常のコンピューターの場合とは異なるように見えることです(コマンド「headers」を使用して調べます)。そのための新しい質問を開始します。ここにリンクを投稿してください。

于 2012-06-08T10:21:38.473 に答える