web-dev-qa-db-ja.com

Mavenの「POM」パッケージとは何ですか?

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

このアプリケーションをデプロイするには、mvn installの後に何をするべきですか? warファイルをどこかで見つけることができると期待していましたが、間違った場所を探しているか、ステップを見逃していると思います。

150
Derek

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

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

もちろん:

$ find . -iname "*.war"

同様に機能します;-)。

130

pomパッケージは、主な成果物がwarまたはjarではなく、pom.xml自体であることを示す単なる仕様です。

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

「ドキュメント」プロジェクトを考えてください。プライマリアーティファクトはPDFかもしれませんが、すでにビルドされており、MavenにPDFをビルドする方法を伝えるために、セカンダリアーティファクトとして宣言する作業が必要になる場合があります。 _コンパイルする必要はありません。

39
Edwin Buck

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

21
bmargulies

mvn:install を実行するときに単に質問に答えるために、mavenは(packaging属性に基づいてパッケージ化されたアーティファクトを作成します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インストールすると、ローカルの.m2リポジトリに追加する必要があります。他の場所に公開するには、正しい配布管理情報を設定する必要があります。 Mavenによってアーティファクトが自動的に添付されない場合、mavenビルダーヘルパープラグインを使用する必要がある場合もあります。

7
James Morgan

古典的な例を参照することをお勧めします: 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パッケージを含めることができます。

3
Vishal

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

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

1
TaylorChen

実際のユースケース

Javaが重い企業では、Nexusアーティファクトリポジトリに移動する必要があるpythonプロジェクトがありました。 Pythonには実際にはアーティファクトがないため、単にpythonファイルを.tarまたは.Zipしてプッシュしたかっただけです。リポジトリにはすでにMavenが統合されているため、<packaging>pom</packaging>指定子を maven Assemblyプラグイン とともに使用して、pythonプロジェクトを.Zipとしてパッケージ化し、アップロードしました。

手順の概要はこの SO post

1
Adam Hughes

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

mvn clean compile installのような外部パッケージ/コンテナで操作を実行する場合。その後、内部パッケージ/モジュールもクリーンコンパイルインストールを取得します。

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

0
Abdul Gafoor

POM(プロジェクトオブジェクトモデル)は、プロジェクトを構築するための自動化スクリプトに他なりません。自動化スクリプトをXMLで記述できます。構築スクリプトファイルは、異なる自動化ツールで異なる名前が付けられます。

aNTのbuild.xml、MAVENのpom.xmlを呼び出すように

MAVENは、jar、war、ear、POMをパッケージ化できます。

確認したい場合 WHAT IS POM.XML

0
Venky Vungarala