問題タブ [maven-bundle-plugin]
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.
apache-felix - OSGi と推移的な依存関係
OSGi プロジェクトに Felix Framework を使用していますが、サードパーティの依存関係に関する深刻な問題に遭遇しました。
eclipse と maven-bundle-plugin を使用して、ソースからバンドルを生成し、POM.XML ファイルから MANIFEST.MF を生成しています。ここまでは順調ですね。ただし、バンドルにサードパーティの依存関係がある場合、通常はバンドルではない JAR の無限のリストを探し、依存関係がなくなるまでそれらを /bundle Felix ディレクトリに配置します。
私はこのプロセスを「OSGi アプリケーションが機能するようにインターネットをダウンロードする」と呼んでいます。
私は何を間違っていますか?確かに、私は何か非常に間違ったことをしているに違いありません。なぜなら、B に依存するバンドル A を持ち、それが C と D に依存し、その 2 つが他のいくつかに依存するなどということは想像できないからです。これらの依存関係はすべて、Google または Maven Central を使用して手動で行います。それは正気じゃない!
これを自動化する正しい方法は何ですか? 私は2つの解決策のいずれかを持ちたいと思っています:
1)すべての依存関係が埋め込まれた大規模なJARファイルを作成できますが、必要なパッケージのみをエクスポートし、もちろんパッケージをインポートしません。
2) (私の推奨する解決策) すべての依存関係を個別の JAR ファイルにまとめて、/bundle ディレクトリに簡単に貼り付けることができます。
3) (さらに望ましい) プロジェクトに 8GB の依存関係をダウンロードせずにサードパーティの JAR を使用する方法があること。
これを行うツールを見つけましたが、直接 (1 次) の依存関係のみを対象としており、推移的な依存関係を手動で解決する必要があります。
この問題は重大です。このようなツールがないことが、OSGi の使用を妨げています。検索して検索して検索し、PAX、bndtools、フレンズなど 101 のソリューションすべてに出くわしましたが、この問題は解決していないようです…</p>
私を助けてください。可能であれば、生きた例を提供してください。私のような世界中の人々が、この問題の解決策から恩恵を受けるでしょう。
ありがとう!
-
-
編集: JScience を使用しようとしているサンプル プロジェクトを添付していますが、結果の JAR バンドルは新しいインポートを要求し続けます。つまり、自己完結型ではありません。
例へのリンク: https://www.dropbox.com/s/svo3nu3vawvv2xn/RequireJscienceExample.zip?dl=0
私は通常、Eclipseを使用してサードパーティのJARをバンドルに変換しようとしますが、常に私が持っていないパッケージをインポートする必要があるため、あなたが述べたように終わりのない状況です.
maven-bundle-plugin の Conditional_Package タグに関するドキュメントは見つかりませんでした。ただし、関連する検索では、以前に試したインライン オプションが表示されますが、成功しませんでした。
JScience ライブラリを使用して 1 つのクラスを持つ基本的なプロジェクトを作成しました。その POM.XML には次のものがあります。
私は、osgi フレームワーク自体からのものではないすべてのパッケージをインライン化することを Maven と言っています。結果の JAR を見ると、かなり良さそうです。JAR 全体ではなく、パッケージのみを埋め込んでいます (ただし、2 つしか使用していないため、これらのインライン パッケージはすべて必要ではないように見えます)。さらに、MANIFEST.MF ファイルを開くと、次の問題のある行が表示されます。
org.joda.convert と org.xml.sax がないと言っています。
私が驚いたのは、OSGi と互換性があると述べているライブラリ (JScience) について話していることです: http://jscience.org/
私は何が欠けていますか?JScienceを使わないわけにはいきません。また、OSGi サードパーティの統合が困難なため、開発時間を節約できるサードパーティのライブラリをいくつか拒否したことがあります。
osgi - パッケージをバンドルするためのターゲットの代わりに src が使用されます
プロジェクトでコマンド「mvn package」を実行すると、src/main/resources/META-INF の persistence.xml、persistence.xml.dev、persistence.xml.qa などのリソース ファイルがバンドルにパックされます。ターゲット フォルダーにはリソース ファイル persistence.xml が 1 つしかないため、src フォルダーではなくターゲット フォルダーを参照するように mvn-bundle-plugin を作成する方法を教えてください。私のpom mave-bundle-pluginは以下にあります
maven - maven-bundle-plugin で「Require-Bundle」をサポート予定
推奨される OSGi の方法でなくても、maven-bundle-plugin で「Require-Bundle」をサポートする計画はありますか。たとえば、分割されたパッケージをマージするために、「Require-Bundle」を使用することが理にかなっている状況があります。
java - OSGI 番号のインポート制限
私はOSGIベースアプリケーションを構築しています。私のクラスの1つで、重要な数のインポート(約30)を行い、アプリを起動すると、この例外が発生します:
コードにコメントを付けてインポートの数を減らすと、すべてうまくいきます。
OSGI の制限のようですが、どうすれば修正できますか?
ありがとう、
maven - ServletContainerInitializers を異なるバンドルから単一の OSGi バンドルにパックする
次の依存関係で構成される OSGi バンドルを作成しています
SCI を websocket と jasper の両方にパックしたいと考えています。
私の IncludeResource セクションは次のとおりです
ここでの問題は、websocket SCi しか取得していないことです。jasper リソースは websocket リソースによってオーバーライドされると思います。私が指定した順序に依存します。
両方のリソースを同じバンドルに入れるにはどうすればよいですか?
maven - OSGi バンドル内のインポート パッケージの数を減らす
*;resolution=optional
OSGi バンドル内で、特定のインポートを削除して指定しようとしています。実行時にインポートを確認すると、次のようになります
こんなに減らせますか?
これは良い習慣ですか?
後の構成で jar をビルドすると、まだ MANIFEST ファイルで、パッケージの横に resolution=optional が表示されます
編集済み
依存セクション
java - 一部のパッケージを OSGi バンドルにコピーしない
Maven バンドル プラグインを使用して OSGi バンドルを作成するときに、一部のパッケージをコピーから除外したいと考えています。
!package name
エクスポートセクションで使用しました。しかし、私は を使用@openejb-core-${openejb.version}.jar!/**
しているため、 include-resource セクションでそのパッケージがバンドルにコピーされます。
Maven バンドル プラグインを使用して特定のパッケージまたは一連のパッケージをコピーしないようにするにはどうすればよいですか?
リソース セクションで名前を使用できますが、1 つずつリストするのは避けたいと思います。