問題タブ [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.
maven - maven-shade-plugin での maven-bundle-plugin の使用
ビルドのパッケージ段階でいくつかのパッケージを再配置するために maven-shade-plugin を使用しています。また、maven-bundle-plugin を使用してマニフェストを生成しています。問題は、バンドル プラグインがシェード プラグインの前に (プロセス クラス フェーズで) 実行され、生成されたマニフェストのエクスポートにシェーディングされたパッケージが含まれないことです。
再配置されたパッケージがバンドル プラグインによって他のパッケージと同様に扱われるように、これら 2 つのプラグインを互いにうまく連携させるにはどうすればよいですか?
--
リクエストにより、POM の Shade および bundle セクション:
ここから撮影
maven - CQ5 カスタム プラグインで外部 jar を使用する方法
xml を解析して他の処理を行うには、独自のプラグインを作成する必要があります。以下のパーサー クラス pom.xml を含む独自のバンドル プラグインを作成しました。
その後、xml を解析するクラスを作成し、org.apache.xerces パッケージを使用したいと考えています。
org.apache.xerces jar を含む他のバンドルも作成し、インストールしてhttp://myhost.com:4502/system/console/bundlesでアクティブにしています。
コア プラグインの Java クラスで DOMParser 変数を宣言する場合 (上記の pom.xml ):
}
次に、/crx-quickstart/logs/ でエラーが発生します。
DOMParser は、私が使用したい単なるサンプル クラスです。私のプロジェクトでは、他のプロバイダーからの外部 jar を使用する必要があります。これは単なる POC です。主な質問は次のとおりです。CQ5 で外部 jar を使用する方法は? すべてのカスタム プラグインがこれらの jar を使用するように CQ にインストールする方法を教えてください。
xerces の依存関係を
<Embed-Dependency>xercesImpl;scope=compile</Embed-Dependency>
そして私は今、次のようなエラーが発生することを追加しました:
java - 分割パッケージの処理: Require-Bundle with maven-bundle-plugin
私は既存のライブラリーのコレクションを適応させ、それらを OSGi バンドルとして構築しています。これはマルチモジュールの Maven プロジェクトであり、POM の継承と集約のいくつかのレイヤーがあります。理想的には、プラグイン構成は親 POM のみに配置されます。
プロジェクトは 100 個以上の jar で構成されています。ライブラリ全体を網羅し、すべてのパッケージをエクスポートするメガ バンドルが既に存在します。私の取り組みは、ライブラリをよりモジュール化することを目的としています。これが、そもそもライブラリを OSGi バンドルとして持つ主な理由です。
主な問題は、このライブラリには分割パッケージの悪夢があり、パッケージ構造を変更できないことです。OSGi in ActionRequire-Bundle
という本で推奨されているように、を使用して問題を解決しようとしていますが、本ではそれは良い習慣ではないと述べています。「分割」という名前の任意の属性を使用して、バンドルの一部を分離し、特定のパッケージのみをインポートすることをお勧めします。しかし、同じパッケージを提供するバンドルの数が多いため、構成が複雑すぎることが判明しました。Import-Package
私の質問maven-bundle-plugin
<Require-Bundle>
は、すべてのバンドル名とバージョンを手動でリストする代わりに、可能であればすべての Maven 依存関係を使用するように指示する形式としてワイルドカード (* など) を使用するようにディレクティブを構成する方法です。つまり、これに代わるものはありますか:
ある種のワイルドカードマッチングを使用し、親POMに入れることができますか?
osgi - Apache Felix での OBR 解決中の OSGI Bundle Repository (OBR) 機能の競合
大規模なアプリケーションの展開オプションとして Felix での OBR の使用を調査していますが、いくつかの初期のハードルに遭遇しました。
取られたアプローチ
- 「Require-Bundle:」セクションで、すべての単一アプリケーションの依存関係 (基本的には手動展開のすべて) を、サードパーティのライブラリに至るまで一覧表示する manifest.mf を含む新しい jar を作成しました。私の意図は、最初にすべてを宣言し、次にペアリングして、OBR を介してサードパーティのバンドルを解決することでした。
maven-bundle-plugin を使用して、ローカルの .m2 リポジトリを OBR としてインデックス付けしました
/li>Apache Felix を起動し、OBR リポジトリを追加しました
/li>アプリケーションのバンドル依存関係リスト全体を含む jar をデプロイしようとしました
/li>
問題
Spring の依存性注入を使用するため、javax.inject の一部のバンドルにはパッケージ要件があります。ただし、OBR には、javax.inject の機能をアドバタイズする複数のバンドルがあります。Spring バンドルと Google Guice バンドルの両方で利用できます。残念ながら、OBR リゾルバはアプリケーションの起動を妨げる Guice 実装を選択しているようです。
回避策
OBR インデックスから Guice ライブラリを削除すると、OBR リゾルバーはそれを見つけられないため、Spring 実装が使用され、アプリケーションは問題なく起動します。
質問
- Spring の javax.inject 実装を含む、高レベルのアプリケーション jar 内のすべての依存関係を一覧表示しました。Felix の OBR リゾルバーがパッケージ要件を解決しようとしているのはなぜですか? この方法で (単一のバンドルを使用して) デプロイしようとすると、深さ優先の方法で OBR 解決が行われますか?
- パッケージ機能の競合がないことを確認するために、サードパーティ製ライブラリの OBR リポジトリを作成/維持するために通常使用される戦略は何なのか知りたいです。アプリケーションの依存関係のみを含み、パッケージ機能の競合がない、より小さな OBR リポジトリ インデックスを作成して維持する必要がありますか? 役立つMavenプラグインはありますか?
- より広いコミュニティは、OBR を介して一度に 100 を超えるバンドルをどのようにデプロイしますか? おそらく、親バンドル ソリューションよりも優れたオプションがあります。
java - BND には、'uses' ディレクティブに同じバンドルのエクスポートされたパッケージが含まれます
maven-bundle-plugin
BND を使用する を使用して、ライブラリを OSGi バンドルとしてパッケージ化しています。BND が非常に長いリストを生成していることに気付きました。これは主に、ライブラリ自体によって他のエクスポートされたパッケージのディレクティブでExport-Package
エクスポートされた多くのパッケージが含まれているためです。uses
私は(ちょっと)uses
指令を理解しています。この場合uses
、エクスポートされたパッケージのクラスによって、他のパッケージのクラス ( にリストされている) がメソッド シグネチャで使用されている (したがって、インポートされている) と思います。
この意味で、私は2つの質問があります:
uses
エクスポートされたパッケージのディレクティブに、同じバンドルによってエクスポートされたパッケージを含めることが本当に必要ですか? これらのパッケージは、他のバンドルによってエクスポートされることはありません。したがって、分割パッケージはありません。- この動作は、ライブラリのパッケージ構造が正しく定義されていないことを示していますか? 最上位パッケージで使用されるいくつかのクラスは、多くの場合、サブパッケージにあり、その逆もあります。これは、OSGi バンドルに適合されたライブラリーです。パッケージ構造は、OSGi フレンドリーになるようには設計されていません。
ほとんどのエクスポートされたパッケージが MANIFEST にリストされている方法は次のとおりです。
uses
上記のリストのすべてのパッケージjavax.measure.unit
から、別のバンドルからのみインポートされます。
maven-bundle-plugin
構成:
java - Maven バンドル プラグインで自動および手動のエクスポート パッケージ選択を組み合わせる
ソースによると、Maven バンドル プラグインは、バンドルmanifest.mf
ファイルにエクスポート/インポート パッケージ情報を自動的に追加します。
*.impl
たとえば、maven-bundle-plugin が自動的に含めないパッケージを追加する場合など、export-packages を手動で指定する必要がある場合があります。ただし、タグでパッケージを指定する<Export-Package>
と、自動エクスポートは実行されません。手動で宣言する必要があるパッケージが 1 つしかない場合、他のパッケージはこのプラグインによって自動的に export-package ブロックに追加できます。したがって、自動生成された export-package マニフェストを使用して、手動で指定したパッケージを追加したいと考えています。
手動を使用しているときにエクスポート情報の自動生成を有効にするにはどうすればよいですか?
deployment - maven-bundle-plugin (v2.3.7) にサードパーティのライブラリを含める方法
私はservicemix(v4.5.3)を使用しており、maven-bundle-pluginを介してバンドルとしてアプリケーション(数百のサードパーティライブラリに依存)をデプロイしたいと考えています。
以下は私のpom.xmlです
これに従ってバンドルを作成しましたが、mvn bundle:wrapを実行すると、外部 jar がバンドルに変換され、プロジェクトの target/classes フォルダーに配置されます。
さて、私の質問は、アプリケーションを実行するために、すべてのバンドルをコピーし、servicemix インストール ディレクトリの deploy フォルダーに配置する必要があるかどうかです。私はこのアプローチに従いましたが、それでもアプリケーションの起動中にエラーが発生します。
マニフェスト ファイル:
これは、バンドルのマニフェスト ファイルのほんの一部です。ここでは、バンドルを開始するための問題と思われるいくつかのバンドルがまだ解決されていません。
そして 2 番目のクエリ: maven-bundle-plugin を使用しているときに、すべてのサードパーティ ライブラリを処理するためのより良い方法はありますか。貴重な提案を待っています。
java - Maven バンドル プラグイン: エクスポートにはプライベート参照があります
実行中のmaven-bundle-plugin
バージョンからバージョン2.3.5
に更新した後、いくつかの警告メッセージが出力されますが、これは完全には理解できません。例えば2.4.0
mvn clean install
Export ch.entwine.weblounge.contentrepository.impl.index, has 1, private references [org.elasticsearch.action.bulk]
これは、組み込みライブラリ(elasticsearch)と関係があると思います。POM の一部を次に示します。
エラーメッセージの正確な意味は何ですか? このような問題を解決するための推奨される方法は何ですか?