コンパイルしてTomcatサーバーにデプロイするためのMavenプロジェクトが与えられました。今日までにMavenを使用したことはありませんが、かなりグーグルで検索しています。このプロジェクトの最上位のpom.xml
ファイルのパッケージタイプはpom
に設定されているようです。
このアプリケーションをデプロイするには、mvn install
の後に何をするべきですか? war
ファイルをどこかで見つけることができると期待していましたが、間違った場所を探しているか、ステップを見逃していると思います。
pom
は基本的にサブモジュールのコンテナです。各サブモジュールは、pom
パッケージを使用したpom.xml
と同じディレクトリ内のサブディレクトリによって表されます。
プロジェクト構造内のどこかにネストされたパッケージには、war
パッケージ化された成果物(モジュール)があります。 Mavenは通常、すべてを各モジュールの/target
サブディレクトリに構築します。したがって、mvn install
の後に、target
パッケージ化されたモジュールのwar
サブディレクトリを調べます。
もちろん:
$ find . -iname "*.war"
同様に機能します;-)。
pomパッケージは、主な成果物がwarまたはjarではなく、pom.xml自体であることを示す単なる仕様です。
多くの場合、問題のプロジェクトのサブディレクトリに通常含まれる「モジュール」と組み合わせて使用されます。ただし、プライマリバイナリをビルドすることを意図していない特定のシナリオで使用される場合があり、他のすべての重要なアーティファクトはセカンダリアーティファクトとして宣言されています
「ドキュメント」プロジェクトを考えてください。プライマリアーティファクトはPDFかもしれませんが、すでにビルドされており、MavenにPDFをビルドする方法を伝えるために、セカンダリアーティファクトとして宣言する作業が必要になる場合があります。 _コンパイルする必要はありません。
pom
のパッケージ化は、他のプロジェクトを集約するプロジェクト、および有用な出力のみが何らかのプラグインからの添付アーティファクトであるプロジェクトで使用されます。あなたの場合、私はguessにトップレベルのpomが他のディレクトリを集約する<modules>...</modules>
を含み、実際の出力は他の(おそらくサブ)ディレクトリの1つの結果だと思います。この目的のために賢明にコーディングされた場合、war
のパッケージになります。
mvn:install を実行するときに単に質問に答えるために、mavenは(packaging属性に基づいてパッケージ化されたアーティファクトを作成しますpom.xml)、mavenインストールを実行した後、.package拡張子のファイルを見つけることができます
アーティファクトをPOMとしてパッケージ化するということは、ライフサイクルが非常に単純であることを意味します
package -> install -> deploy
http://maven.Apache.org/guides/introduction/introduction-to-the-lifecycle.html
これは、pom.xmlファイルまたは他のパッケージタイプに適合しないプロジェクトを展開する場合に役立ちます。
多くのプロジェクトでPOMパッケージを使用し、必要に応じて追加のフェーズと目標をバインドします。
たとえば、一部のアプリケーションでは次を使用します。
prepare-package -> test -> package -> install -> deploy
アプリケーションをmvnインストールすると、ローカルの.m2リポジトリに追加する必要があります。他の場所に公開するには、正しい配布管理情報を設定する必要があります。 Mavenによってアーティファクトが自動的に添付されない場合、mavenビルダーヘルパープラグインを使用する必要がある場合もあります。
古典的な例を参照することをお勧めします: http://maven.Apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once
ここで、my-webappはWebプロジェクトであり、my-appプロジェクトのコードに依存します。したがって、2つのプロジェクトを1つにまとめるために、最終的にバンドルされるプロジェクト(Mavenの用語によるモジュール)を示す最上位のpom.xmlがあります。そのようなトップレベルのpom.xmlは、pomパッケージを使用できます。
my-webappにはwarパッケージがあり、my-appに依存することができます。 my-appにはjarパッケージを含めることができます。
https://maven.Apache.org/pom.html
パッケージングタイプは、親プロジェクトおよび集約(マルチモジュール)プロジェクトのpomである必要がありました。これらのタイプは、一連のライフサイクルステージにバインドされた目標を定義します。たとえば、パッケージがjarの場合、パッケージフェーズはjar:jarゴールを実行します。パッケージがpomの場合、実行される目標はsite:attach-descriptorになります
実際のユースケース
Javaが重い企業では、Nexusアーティファクトリポジトリに移動する必要があるpythonプロジェクトがありました。 Pythonには実際にはアーティファクトがないため、単にpythonファイルを.tarまたは.Zipしてプッシュしたかっただけです。リポジトリにはすでにMavenが統合されているため、<packaging>pom</packaging>
指定子を maven Assemblyプラグイン とともに使用して、pythonプロジェクトを.Zip
としてパッケージ化し、アップロードしました。
手順の概要はこの SO post
「pom」パッケージは、jar、war、earなどの他のパッケージ/モジュールを含むコンテナに他なりません。
mvn clean compile installのような外部パッケージ/コンテナで操作を実行する場合。その後、内部パッケージ/モジュールもクリーンコンパイルインストールを取得します。
パッケージ/モジュールごとに個別の操作を実行する必要はありません。
POM(プロジェクトオブジェクトモデル)は、プロジェクトを構築するための自動化スクリプトに他なりません。自動化スクリプトをXMLで記述できます。構築スクリプトファイルは、異なる自動化ツールで異なる名前が付けられます。
aNTのbuild.xml、MAVENのpom.xmlを呼び出すように
MAVENは、jar、war、ear、POMをパッケージ化できます。
確認したい場合 WHAT IS POM.XML