mavenの「pom」パッケージとは何ですか?


175

コンパイルしてTomcatサーバーにデプロイするためのMavenプロジェクトが与えられました。私は今日までmavenを使用したことがありませんが、かなりググっているようです。pom.xmlこのプロジェクトの最上位ファイルのパッケージタイプはに設定されているようpomです。

mvn installこのアプリケーションをデプロイするために何をする必要がありますか?warどこかでファイルを見つけることができると思っていましたが、間違った場所を探しているか、ステップが抜けているようです。


3
インストールMVN -これはあなたのローカルリポジトリであなたのアーティファクトを(JAR、WAR、EAR)をインストールするために使用されている(通常は〜/ .m2 /リポジトリdirecotryなります)
ルカシュSiwiński

回答:


148

pom基本的にはサブモジュールのコンテナです。各サブモジュールはpom.xmlpomパッケージングと同じディレクトリ内のサブディレクトリによって表されます。

どこかに、プロジェクト構造内にネストされ、warパッケージ化された成果物(モジュール)が見つかります。Mavenは通常、すべてを/target各モジュールのサブディレクトリにビルドします。したがって、パッケージ化されたモジュールのサブディレクトリをmvn install調べてください。targetwar

もちろん:

$ find . -iname "*.war"

等しく機能します;-)。


45

pomパッケージは、主要なアーティファクトがwarまたはjarではなく、pom.xml自体であることを示す仕様です。

多くの場合、問題のプロジェクトのサブディレクトリに通常含まれている「モジュール」と組み合わせて使用​​されます。ただし、プライマリバイナリを構築する必要のない特定のシナリオで使用することもできます。その他の重要なアーティファクトはすべてセカンダリアーティファクトとして宣言されています。

「ドキュメント」プロジェクトについて考えてみてください。主要な成果物はPDFである可能性がありますが、すでに構築されており、それを二次的な成果物として宣言する作業は、Mavenに必要のないPDFの構築方法を伝えるために構成よりも望ましい場合があります。編集済み。


同様の行でpomプロジェクト==>抽象クラスとその中のモジュール==>具象クラスと考えることができる他の例。
bharatj

22

のパッケージ化pomは、他のプロジェクトを集約するプロジェクト、および一部のプラグインからの添付アーティファクトのみが有用な出力であるプロジェクトで使用されます。あなたの場合、私はあなたのトップレベルのpomが他のディレクトリを集約するためにインクルードしていると思います<modules>...</modules>、そして実際の出力は他の(おそらくサブ)ディレクトリの1つの結果です。この目的のために適切にコーディングすると、のパッケージが作成されwarます。


1
「ある有用な出力のみがいくつかのプラグインからの添付アーティファクトである」とはどういう意味ですか?
omjego 2018

9

mvn:installを実行するときに質問に簡単に答えるために、mavenは(pom.xmlのパッケージング属性)に基づいてパッケージ化されたアーティファクトを作成します。mavenインストールを実行すると、.package拡張子が付いたファイルを見つけることができます

  • プロジェクトワークスペースのターゲットディレクトリ
  • また、Maven 2ローカルリポジトリがボックスで(.m2 / respository)を検索している場合、アーティファクトは(groupId / artifactId / artifactId-version.packaging)ディレクトリの下の.m2リポジトリにリストされます
  • ディレクトリの下を見ると、パッケージ化された拡張ファイルとpom拡張も見つかります(pom拡張は基本的に、このパッケージの生成に使用されるpom.xmlです)
  • Mavenプロジェクトがマルチモジュールの場合、pomのみを持つトップレベルのプロジェクトを除いて、各モジュールは上記のように2つのファイルになります

8

アーティファクトを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 installすると、ローカルの.m2リポジトリに追加されます。他の場所で公開するには、正しい配布管理情報を設定する必要があります。アーティファクトがMavenによって自動的にアタッチされない場合は、Mavenビルダーヘルパープラグインを使用する必要がある場合もあります。


6

古典的な例をhttp://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_onceで見ることをお勧めします

ここで、my-webappは、my-appプロジェクトのコードに依存するWebプロジェクトです。したがって、2つのプロジェクトを1つにバンドルするために、最終的にバンドルするプロジェクト(Mavenの用語によるモジュール)を記述した最上位のpom.xmlがあります。このような最上位のpom.xmlは、pomパッケージを使用できます。

my-webappはwarパッケージを持ち、my-appへの依存関係を持つことができます。my-appはjarパッケージを持つことができます。


2

実際の使用例

Javaを多用する会社では、Nexusアーティファクトリポジトリに移動する必要があるpythonプロジェクトがありました。Pythonには実際にはアーティファクトがないので、Pythonファイルを.tarまたは.zipしてプッシュするだけです。リポジトリにはすでにMaven統合が含まれているため、Pythonプロジェクトをとしてパッケージ化してアップロードするために<packaging>pom</packaging>Mavenアセンブリプラグインでデジグネーターを使用しました.zip

手順はこのSO投稿で概説されています


1

「pom」パッケージは、jar、war、earなどの他のパッケージ/モジュールを含むコンテナにすぎません。

mvn clean compile installのような外部パッケージ/コンテナに対して何らかの操作を実行した場合。次に、内部パッケージ/モジュールもクリーンコンパイルインストールされます。

パッケージ/モジュールごとに個別の操作を実行する必要はありません。


1

https://maven.apache.org/pom.html

親プロジェクトおよび集約(マルチモジュール)プロジェクトのpomである必要があるパッケージ化タイプ。これらのタイプは、一連のライフサイクルステージにバインドされた目標を定義します。たとえば、パッケージ化がjarの場合、パッケージフェーズはjar:jarゴールを実行します。パッケージがpomの場合、実行される目標はsite:attach-descriptorになります。


0

POM(Project Object Model)は、プロジェクトをビルドするための自動化スクリプトにすぎません。XMLで自動化スクリプトを記述できます。ビルドスクリプトファイルには、異なる自動化ツールで異なる名前が付けられます

ANTでbuild.xmlを呼び出し、MAVENでpom.xmlを呼び出すように

MAVENは、jar、wars、ears、およびPOMをパッケージ化できます。

WOM IS POM.XMLを確認したい場合

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.