3

ビルド プロセスの一環として、war プラグインによって生成されたマニフェスト ファイルにあるのと同じ情報を含めたい別のアーティファクト (内部に静的 Web ファイルを含む圧縮ファイル) を生成しています。マニフェスト ファイルは war ファイルに正しく生成されますが、コピーして圧縮ファイルにも入れることができるようにアクセスしたいと思います。

maven-war-plugin:manifest ゴールのドキュメントには、次のように書かれています。

マニフェスト ファイルは warSourceDirectory に作成されます。

デフォルトの場所は次のとおりです: ${basedir}/src/main/webapp

ただし、生成されるマニフェストは戦争内のみです。生成されたマニフェスト ファイルがソースに配置されることも意味がありません。戦争がパッケージ化されたターゲットに入れられると思います。

何か不足していますか?

4

1 に答える 1

9

組み込みのライフサイクル リファレンスを見ると、ライフサイクルのどの時点でも<packaging>war</packaging>war:manifest目標がどのフェーズにも結び付いていないことがわかります。

したがって、デフォルトでは、このゴールは実行されません (実行を追加しない限り)。

MANIFEST.MFその時点でファイルがある${basedir}/src/main/webapp/META-INF/MANIFEST.MF場合、ゴールが実行されているときに、中間ファイルを作成せずにオンザフライでwar:war生成してファイルに直接埋め込むのではなく、そのファイルを使用します。MANIFEST.MF.war

私が知る限り、war:manifest目標はテンプレートを生成するために使用されるように設計されており、MANIFEST.MFそれをカスタマイズして今後使用することができます.

war プラグインにはいくつかの目標があり、それらを避けることをお勧めします。

  • war:inplace
  • war:manifest

その理由は、これらの両方の目標がsrcツリー内のファイルを変更するためです。これは、ファイルに触れるだけの標準的な Maven の慣行に反するためです(ターゲットを削除するだけでtargetよいため、非常に便利です)。mvn clean

あなたの質問に関して、重要なことは、別のアーティファクトを生成していることです。Maven モジュールごとに 1 つのアーティファクトに固執する場合、Maven は最適に機能します。したがって、個別のアーティファクトには個別のモジュールがあります。を依存関係として追加し.war(覚えておいてください<type>war</type>) 、ファイルdependency:unpack-dependenciesを解凍するために使用し.warます... のみを解凍することができます。それが最終META-INF/MANIFEST.MF的にtarget/${project.build.finalName/META-INF/MANIFEST.MFこの2番目のアーティファクトをパックするときに、同じマニフェストがあることを確認しますあなたの.warファイルとして。

于 2013-08-19T21:51:36.997 に答える