6

OSGI アプリケーションの開発にBndTools ( http://bndtools.org/ ) を使用しています。すべて正常に動作していますが、アプリのエクスポート中に変更したいことがいくつかあります。

私は2つのことを達成しようとしています(関連していると思います):

1: デフォルトの BndTools ランチャー ( aQute.launcher) をカスタムのランチャーに置き換えます (または.JARフォーマットします) 。

デフォルトの BndTools ランチャー (aQute.launcher) を削除またはカスタム ランチャーに変更するにはどうすればよいですか?

このトピックについて私が知ることができた唯一のことは、ここにあります: http://goo.gl/jYliih

ランチャーは bnd に組み込まれておらず、実際の起動戦略はパラメーター化されています。ランチャは、JAR を .xml ファイルに配置することにより、bnd または bndrun ファイルに関連付けられます-runpath。に.JARは、ランチャーになる Launcher-Plugin ヘッダーが必要です。上にランチャーが見つからない場合は-runpath、ビルトインbiz.aQute.launcherが使用されます。

その理由は、アプリがコマンド引数を受け入れ、aQute ランチャーのものに干渉しないようにする必要があるためです (すべての -run 引数と同様)。一方.bat/.sh、アプリを起動するバッチ アプローチを取り除き、単一の.jarファイルを使用してアプリを起動したいと考えています。

それは可能ですか?

2: エクスポートされたファイル構造をカスタマイズする

デフォルトでは、BndTools はアプリをエクスポートするときに次のファイル構造を作成します。

jar/ -> これは OSGI jar バンドル フォルダーです。

aQute/ -> デフォルトの BndTools Launcher (Launcher.class 内部)

META-INF/ -> META-INF フォルダがここにあるのはなぜですか? JARではありません

launcher.properties -> ランチャーのプロパティ

start.sh --> このバッチ ファイルから Launcher.class を起動します。

start.bat / JARと比較して、これの利点はどこにありますか?

基本的に、、およびファイルを削除しaQute、バイナリ ファイル用のフォルダーを追加したいと思います。META-INFstart.*bin

これは、「Ant」、「Maven」、または「Gridle」スクリプトで実現できるはずです。しかし、BndTools をサポートしない「BndTools プロジェクト」または「Gradle プロジェクト」を作成することはできます。「BndTools Gradle プラグイン」をインストールしましたが、このトピックに関する有用なドキュメントはどこにも見つかりませんでした。

誰かが私を助けてくれるか、これで正しい方向に向けてくれることを願っています. ご挨拶。

4

1 に答える 1

4

(この質問は、bndtools グループ リストでも尋ねられました)

あなたの願いが叶ったようで、少し混乱しています。bndrun ファイルを単一の実行可能 JAR にエクスポートできます。bndtools プログラムでは、オブジェクト サービスを取得してから「launcher.arguments」サービス プロパティを取得することで、コマンド ライン引数にアクセスできます。これは、ランチャーのメイン メソッドに指定された元の String[] です。

@Reference(target=“(launcher.arguments=*)”)
void setArgs( Map<String,Object> args ) {
    … = (String[]) args.get( “launcher.arguments”;
}

エクスポートされた JAR は、実行可能な JAR です。は、JPM によってローカル実行可能ファイルに簡単に変換できます。

jpm install -n mycode mycode.jar

jpm はhttps://github.com/bndtools/jpmcliからインストールできます。

ロバート: ピーター、ありがとう。ランチャーの引数のコード スニペットはまさに私が必要としていたものです。

フォルダ構造について:

バンドルを更新可能にする必要があります。すべてのバンドルを .Jar 内に埋め込むと、それらを更新できなくなります。バンドルを外部に置いたまま、Launcher をパッケージ化する必要があるだけです。

BndTools には 2 つのエクスポート オプションがあります。1 では、ランチャー全体とすべてのバンドルを 1 つの JAR 内に埋め込むことができます。または、オプション 2 は、lib ディレクトリ内にバンドルを配置し、シェル スクリプト (start.bat、start.sh) を介してそれらを起動することです。シェルスクリプトの少ないソリューションを探しています。

Peter: バンドルは内部にありますが、フレームワークのストレージ領域をクリアしない限り、バンドルを更新できます。たとえば、File Install を簡単に組み込み、ディレクトリからバンドルをロードしたり、別の管理エージェントである Apache Ace を使用したりできます。

私の観点からすると、現在の JAR エクスポート (実際にはディレクトリ エクスポートはかなり嫌いです。面倒です) は最高です。バージョンと更新が簡単な 1 つのファイルだけで、非常に優れたリリース モデルを備えています。JPM を使用すると、任意のシステムにインストールできます。

したがって、何か他のものが必要な場合は、独自のエクスポーターを作成する必要があります...</p>

于 2016-02-29T10:06:57.947 に答える