2017-11-09 4 views
0

私は、最も単純なOSGIの例を特定のJava仮想マシンで動作するかどうかを確認するために作ろうとしています。現在、Open JDK 1.8.0でテストしています。OSGI Activatorクラスが見つかりません

私はthisチュートリアルに従っています。私はパッケージステートメントを.javaファイルから削除したことと、マニフェストから削除したことを除いて全く同じファイルを持っています(私は単純化したいだけです)。

だから、基本的にはマニフェストは以下のようになります。

Bundle-Name: Service listener example 
Bundle-Description: A bundle that displays messages at startup and when service events occur 
Bundle-Vendor: Apache Felix 
Bundle-Version: 1.0.0 
Bundle-Activator: Activator 
Import-Package: org.osgi.framework 

私はjarファイルを生成することができています。

" zip.vim version v27 
" Browsing zipfile /home/cosmin/OSGI_Testing/osgi/test.jar 
" Select a file with cursor and press ENTER 

META-INF/ 
META-INF/MANIFEST.MF 
build/Activator.class 

私は.jarファイルをインストールし、私はそれが例外をスロー起動したときには、Apacheフェリックスを実行します:

ERROR: Bundle [1] Error starting file:/home/cosmin/OSGI_Testing/osgi/. /test.jar (org.osgi.framework.BundleException: Not found: Activator) 
java.lang.ClassNotFoundException: Activator not found by [1] 
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1610) 
    at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1404) 
    at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4505) 
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2220) 
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2145) 
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1372) 
    at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308) 

問題は何それは内容は以下のとおりです。ですか?

ありがとうございました。

答えて

2

これにはいくつかの問題があります。 Activatorクラスは間違ったフォルダにあります...それは既に言及されています。これとは別にOSGiでは常にパッケージ名を使うべきです。特に後でパッケージを共有する場合は、同じパッケージが複数のjarファイルで使用されていないことを確認する必要があります。

手動でマニフェストを作成するようです。これはエラーが起こりやすいプロセスです。 mavenビルドを使用し、maven-bundle-pluginまたはbnd-maven-pluginを使用してManifestを生成することをお勧めします。これはずっと安全です。

into a tutorial I did some time agoをご覧ください。おそらく、あなたのケースでそれを取り除く必要があるかもしれませんが、あなたはmavenビルドを見るでしょう。

最初の試行でアクティベータを起動することをお勧めしますが、すぐに依存性注入フレームワークに切り替える必要があります。 OSGiでは、宣言的なサービスを調べることをお勧めします。

+0

デフォルトパッケージをOSGiで使用することはできません。 –

0

私はActivatorクラスがビルドフォルダにあるべきではないと思います。ビルドフォルダを削除します。

関連する問題