2012-11-05 20 views
7

OSGiバンドルでJavaFX 2.2を使用するにはどうすればよいですか?私はApache Felixを使用していますので、eclispeプロジェクトではありません。 Java7がインストールされたMac OSX上で動作する必要があります(Java6はクールですが、必要ではありません)。OSGiバンドルでのJavaFX 2.2の使用

私はjfxライブラリを再パッケージすることについては読んだが、eclispeプラグインプロジェクトには何かを読んだ。

バンドル内のjavafxパッケージをインポートするだけで、Manifestは欠落した要件osgi.wiring.package Exceptionを作成しました。

答えて

7

JavaFXがOSGi環境でうまく動作するようにするライブラリを含むe(fx)クリップ実行時ツールを使用してみてください。

によるとe(fx)clipse site

JavaFXの-バイナリがユーザーのどこかに位置しているという事実に至るまでのOSGi内で実行しているときに問題を引き起こしている様々な場所があるので、残念ながら、JavaFXのは、心の中のOSGiと書かれていませんシステムを、OSGiの可視性の規則のためにクラスローディングに関する問題に置き換えることができます。 E(FX)は、ザ・クリプス、これらすべての問題に対処するためのヘルパーライブラリを提供し、それはSWTであるとのJavaFXのバンドルを

+1

しかし私はSWTと日食春分を使用していません。そのようなOSGiヘルパーライブラリを作成するためのより一般的な方法はありませんか? – chrise

+1

[e(fx)clipseフォーラム](https://groups.google.com/forum/m/?fromgroups#!forum/efxclipse)に関するご質問は – jewelsea

+1

OSGiバンドルのJavaFXはやや難解です。 e(fx)clipseプラグインは分点で動作していますが、ApacheのFelixでは動作しませんでしたので、javafxクラスをosgi-bundleではなくboot-classloaderに追加する必要がありました。さらなるFXバージョンがここで改善されることを願っています。 – chrise

6

はないスイングが、JavaFXのクラスを追加することと同じように簡単に感じEclipseの春分の岩下JavaFXアプリケーションを書きますブートクラスローダーが動作します。 Apacheのフェリックスと 例:

Map<String,String> properties = new HashMap<String, String>(); 
properties.put(Constants.FRAMEWORK_BOOTDELEGATION, "javafx.*,com.sun.javafx.*"); 
properties.put(Constants.FRAMEWORK_BUNDLE_PARENT, Constants.FRAMEWORK_BUNDLE_PARENT_APP); 

FrameworkFactory factory = new org.apache.felix.framework.FrameworkFactory(); 
org.osgi.framework.launch.Framework framework = factory.newFramework(properties); 
framework.init(); 

今だけ(JavaFXのは、クライアントコンピュータにインストールされている場合)、任意のバンドルからJavaFXのクラスを使用します。

+0

これは良いアプローチです。これは、OSGIコンテナの設定を変更し、余分なコードを必要としないだけで済むでしょうか? –

+0

Apache Karafを持つ誰かが/ etcディレクトリのjre.propertiesファイルを変更できますか? –

11

それはおそらく、あなたを助けるために少し遅れてですが、私はケースの誰でOSGi環境内でのJavaFXを有効にする簡単な方法を文書化したいと思い、私のような、まだトラブルそれをやっていた....

つまり、JavaFXが必要なクラスをロードして使用できるようにする必要があります(JavaFXはJREの内部を使用するため、実際にバンドルするのが難しい)ので、本当に必要なのは、OSGiにアクセスできるようにすることですboostering classpath ...

私は専門家ではありませんが、このブログでは、SpringSourceのCostin Leauが、(JavaFXだけでなく、システムクラスローダーへのフルアクセスを想定している)違う方法:

org.osgi:

http://blog.springsource.org/2009/01/19/exposing-the-boot-classpath-in-osgi/

私は基本的にあなたのOSGiコンテナの設定ファイルでのOSGi-指定されたプロパティ(!任意の実装に固有ではない)を設定する意味のオプションAを、使用することにしました.framework.system.packages.extra = javafx.application;バージョン= 0.0.0 ...

あなたは、この要旨にプロパティの値全体を見ることができる私はクレアをしましたテッド:

https://gist.github.com/renatoathaydes/5021107

私は基本的にどの自動的に、JavaFXの2.2 jarファイルをエクスポートすることができます(と私は単に私のApache KarafのdeployフォルダにJavaFXのジャーをドロップすることによって、これを見つけたすべてのパッケージとそれを設定しますそれをバンドルにして、生成されたマニフェストを見て)...ところで、私はKarafが生成したバンドルを使用しようとしましたが(これはpax-wrapを使用しています)、JavaFXがクラスをロードしようとする方法では動作しません(JavaFXバンドルでは表示されません。 JavaFXがアクセスしようとしているすべてのJREパッケージはもちろんです)。

私が追加したパッケージのすべてが実際には必要ではないと思われますが、安全のために、私はKarafのラッパーによって生成されたものをそのまま残して、うまくいっていなければ変更しません。

JRE libフォルダにjfxrt.jarが存在する限り、私のバンドルでJavaFXを使用できます。

+0

バージョンは0.0.0と宣言されています。これは、OSGi外からのパッケージにはバージョンが設定されていないため、単に「空の」バージョン番号を与えるだけです。 – Renato

関連する問題