問題タブ [bnd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
osgi - bndtools を使用して Declarative Services (DS) コンポーネントを起動できない
Eclipse 用の標準のbndtoolsプラグインをインストールし、apache felix osgi ランタイムを実行しています。宣言型サービス (DS) コンポーネントについて学習しようとしています。どうやら、アノテーション (bndtools のチュートリアルで例が示されています) が存在する前は、コンポーネントは xml データを使用して記述されていました。それが私がやろうとしていることです。
以下は単純なクラスです (DS コンポーネントとして公開されます): "HelloComponent.java"
コンポーネント宣言を行う xml ファイルは次のとおりです: 「minimal.xml」
そして、最終的に OSGi ランタイムに発行される jar ファイルを生成するために bndtools によって使用されることになっている .bnd ファイルは次のとおりです: "minimal_ds.bnd"
ホスト ランタイム OSGi コンテナーで次のバンドルを実行していることに注意してください。
すべてがアクティブに実行されているにもかかわらず、DS コンポーネントが初期化されていない理由がわかりません (コンソール出力「HelloComponent created.」が表示されるはずです)。どんな助けでも大歓迎です。
最後に、プロジェクトのディレクトリ構造は次のとおりです。
osgi - OSGi サブシステムを bndtools でパッケージ化する方法
liberty プロファイル機能をパッケージ化するために、Eclipse の websphere OSGi ツールの代替として bndtools を評価しています。
Liberty プロファイルは、ランタイムの拡張用に .esa としてパックされた OSGi サブシステムを使用します。bnd git リポジトリのこのファイルに基づいて、BND を使用してサブシステムをパッケージ化できるようです。
しかし、ESA プロジェクトのセットアップ方法に関するドキュメントが見つかりません。誰かが私にいくつかの指針を与えることができますか?
osgi - どこでやる '。' パッケージはどこから?
私は、ビルド プロセスで Bndtools を使用して、felix/osgi でアプリケーションを喜んでビルドしています。サードパーティの非バンドル jar をすべてバンドルとしてラップし、すべての社内 jar をバンドルとして構築し、アクティベーターとサービスを含む 4 つのバンドルに取り組んできました。これまでのところ、すべてが美しく機能しています....
...そして、昨日突然、bndtools が '.' を付け始めました。MANIFEST.MF の Import-Package ディレクティブで。これにより、次のエラーが発生しました。
また、バンドルのロードに失敗します。
おそらく、昨日ソース コードに変更を加えたことが原因だと思われますが、私の人生では、それが何であるかを理解することはできません。ここ数日で行った変更は、自分のソース コードだけです。サードパーティの依存関係は追加していません。
eclipse bnd ビルダーにバンドルを生成させると、「.」が配置されません。インポートリストに含まれていますが、ビルドプロセスにantタスクを使用しており、「。」を入れています。パッケージリストに。
なぜそこにそれを入れているのか、誰かコメントできますか?
bnd ファイルは次のとおりです。
java-8 - J2SE 1.8 プロファイルの OSGi システム クラスパスでパッケージに追加のクラスを提供する方法
ee.j2se-1.8 の内部には、パッケージ org.w3c.dom が含まれています。
バンドル xml-apis_1.4.1.20140905-131237.jar には同じパッケージ org.w3c.dom が含まれていますが、重要なクラスが 1 つ追加されています... ElementTraversal.class が追加されています。
ここで私の質問...
Equinox OSGi ランタイム内で不足しているクラスを提供するにはどうすればよいですか?
apache-felix - 特定の jar からクラス ファイルをロード/スキャンしない
埋め込まれた jar に含まれるクラスを完全に無視するように maven-bundle-plugin (bnd を使用) を構成する方法を知りたいです。
バックグラウンド
私は、コードが実行されている環境が単一の会社 (すべてのツールを含む) によって定義されている、制御された環境で作業しています。コードは Java で、OSGi を使用してモジュールの依存関係を定義します。
提供されたモジュールの一部には、無効なクラス ファイルのように見えるものが含まれています。システムがこれらのクラス ファイルを任意のタイプの JVM にロードしようとする前に、これらのクラス ファイルを「修正」すると想定することしかできません。いずれにせよ、これらのクラス ファイルは、ターゲット システムにデプロイされたときに機能します。
システムが理解できるパッケージを生成できる Maven に基づくビルド システムを作成しようとしていますが、これらの無効なクラス ファイルが BND によって (apache-felix を介して) 読み取られ、エラーが発生するという問題が発生しました。
これらのクラス ファイルを含む jar をバンドルのクラス パスに配置する方法が必要ですが、含まれている.class
ファイルは bnd によって読み取られたり処理されたりしません。エラーを単に無視して続行することで解決できますが、ビルド フェーズ全体をフェリックスが中止しない限り、それを行う方法を見つけることができません。
ant - Ant パスから存在しないエントリを削除する
<path>
実際には存在しないディレクトリを含む可能性のある Ant を生成している状況があります。残念ながら、これは に供給されてbnd
おり、パスに何かが欠けていると爆発します。
したがって、<path>
実際に存在するパス要素のみを保持するように a をフィルタリングする方法が必要です。
Antでこれを言う簡単な方法はありますか、それともタスクを書く必要がありますか?
java - Felix Host アプリケーションで OSGi バンドルが起動しない
実行時に拡張機能をロードする機能を提供するために、ホスト アプリケーションで Apache Felix を使用しています。メカニズムはうまく機能しますが、特定の依存関係を含めると、バンドルの開始に関して非常に気まぐれな動作が発生します。たとえば、pom.xml で次を使用するとします。
すべてが完全に機能し、バンドルが登録されて開始されます。ただし、バンドルに含めるasync-http-client
と、登録されますが起動しません! 親が親ホスト アプリケーションによって依存関係を公開しているにもかかわらず、依存関係をバンドルに埋め込もうとしました。コンパイルされたバンドルの中を見ると、jar が含まれていますが、実際には起動しません。
追加してみました:
および変更:
これらのオプションはどちらも機能しません。ホストアプリケーションでエラーが発生していません.一部のライブラリがこれを引き起こし、他のライブラリはそうではない理由を理解できません.
osgi - OSGi コンパニオン バンドルが必要ですか?
Bndtools に基づいて、Eclipse に 2 つの異なるプロジェクトがあります。1 つ目は、次のマニフェストで JAR を生成します。
2 番目には、次のマニフェストがあります。
2 つのプロジェクトには osgi.cmpn が必要です。1 つ目は ServiceTracker (パッケージ org.osgi.util.tracker) 用、2 つ目は ManagedService (パッケージ org.osgi.service.cm) 用です。
最初のプロジェクトはうまく機能します。問題なくバンドルをインストールして開始します。2 番目のプロジェクトからバンドルをインストールできますが、開始すると次のエラーが表示されます。
どうしたの ?両方のプロジェクトに osgi.cmpn JAR が必要な場合...なぜ最初のプロジェクトが開始時にこのエラーをスローしないのですか?
ありがとう、パオロ。