私はOSGiバンドルの1つをwarパッケージ構造でデプロイして、StrutsによってWebアプリケーションとして認識されるようにしたいと考えています。私はMavenを使用しているため、WARパッケージが組み込まれており、OSGi互換のマニフェストを作成するためのMavenバンドルプラグインを持っています。
問題は、2つが連携しないため、バンドルプラグインがクラスファイルがサブフォルダーにclasses/
あり、バンドルされたjarがにlib/
あることを認識しないため、誤ったBundle-classpath
ヘッダーが作成されることです。手動で正しいヘッダーをに追加することもできますpom.xml
が、それを自動的に行わせたいのですが。どうやってやるの?
これを(多かれ少なかれ)達成する1つの方法は、OPS4J Wikiページで説明されています- 「他のプロジェクトタイプでのmaven-bundle-pluginの利点の取得」。
依存関係の埋め込みとBundle-ClassPath
ディレクティブをに設定してpom.xml
、WARプラグインで使用される場所と一致させることができます。その後、maven-bundle-pluginは正しいマニフェストヘッダーを生成します。
maven-bundle-pluginの手順は次のようになります。
<instructions>
<Bundle-ClassPath>.,WEB-INF/classes,{maven-dependencies}</Bundle-ClassPath>
<Embed-Directory>WEB-INF/lib</Embed-Directory>
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
<!-- ... -->
</instructions>
ETA:このアプローチを使用したとき、2つの注目すべきことがわかりました。
WEB-INF
、マニフェストの目標が実行されたときにwarプラグインがそれらをまだ作成していないため、不足しているディレクトリについて文句を言うでしょう(後のフェーズでのみ実行されます)。Bundle-ClassPath
ディレクティブに「。」を含める必要があります。そうしないと、バンドルプラグインがImport-Packages
ヘッダーをめちゃくちゃにしてしまいます。これはGoogle経由のJIRAの問題で見つかりましたが、URLが見つかりません。それ以外は問題なく動作します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加