集約と継承--Maven in Action読書ノート

4939 ワード

1.   2つのモジュールディレクトリでmvnコマンドを別々に実行するのではなく、実際のプロジェクトの複数のモジュールを1つのコマンドで構築できるように、Mavenは集約(またはマルチモジュールと呼ばれる)の特性を提供します.pom.xmlファイルが1つしかなく、他のディレクトリやファイルがない集約用のモジュールを追加できます.そのpom.xmlではpackagingはPOMであり、要素が1つ増えている必要があります.の各で、実際のプロジェクトのモジュールを宣言します.この値は、モジュールのartifactIdではなく、現在のPOMが存在するディレクトリに対するモジュールディレクトリの相対パスです.一般に、集約モジュールはプロジェクトディレクトリの最上位に配置され、他の機能モジュールは集約モジュールのサブディレクトリとして存在し、サブディレクトリ名は機能モジュールのartifactIdと一致する.例:
<groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-aggregator</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Account Aggregator</name> <modules> <module>account-email</module> <module>account-persist</module> </modules> 



 
対応するディレクトリ構造は
2.   プロジェクトのすべての機能モジュールに親モジュールを作成し、親POMにサブPOM継承用の構成を宣言して、「1つの宣言、複数の使用の目的」を達成できます.親モジュールにはpom.xmlファイルが1つしかなく、他のディレクトリとファイルはありません.Pom.xmlのpackaging値はPOMでなければなりません.子POMで親モジュールを宣言する必要があります.
<parent> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-parent</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../account-parent/pom.xml</relativePath> </parent>

 

 
要素relativePathは、親POMの相対パスを宣言します.デフォルトの当直は.../pom.xmlです.親モジュールも集約モジュールに追加する必要があります.
3.   継承可能なPOM要素は次のとおりです.
1)  groupId
2)  version
3)  义齿
4)  organization
5)  InceptionYear(事業開始年)
6)  url
7)  developers
8)  contributors
9)  distributionManagement
10)  issueManagement(プロジェクトの欠陥追跡システム情報)
11)  ciManagement(プロジェクトの継続的統合システム情報)
12)  scm(プロジェクトのバージョン管理システムの情報)
13)  mailingLists
14)  properties
15)  dependencies
16)  dependencyManagment
17)  repositories
18)  build(プロジェクトのソースディレクトリ、出力ディレクトリ、プラグイン構成、プラグイン管理構成などを含む)
19)  Reporting(プロジェクトのレポート出力ディレクトリ構成、レポートプラグイン構成などを含む)
4.   depedenciesは継承できますが、すべてのサブモジュールが親モジュールのすべてのdependenciesを継承しなければならない場合は明らかに不合理です.Mavenは親POMにdependencyManagement要素を提供し、サブPOMに依存を選択的に継承することができます.親モジュールのdependencyManagement要素でdependencies要素で宣言された依存は、POMによって選択的に継承できます.サブPOMのdependencies要素でもこの依存を宣言し、goupIdとartifactIdを宣言するだけで、親POMの宣言を上書きするために別の属性を宣言することもできます.サブモジュールが依存の使用を宣言しない場合、POMでdependencyManagementで宣言した依存は効果がありません.
5.   import範囲の依存はdependencyManagementで宣言されている場合にのみ効果があります.この範囲の依存は通常、ターゲットPOMのdependencyManagement構成を現在のPOMのdependencyManagement構成にインポートしてマージする役割を果たす別のPOMを指します.次のようになります.
<dependencyManagement> <dependencies> <dependency> <groupId>com.juvenxu.mvnbook.account</groupId> <artifactId>account-parent</artifactId> <version>1.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyMangement> 



 
なお、上記のコードのtype値はpomである必要があります.複数の実際のプロジェクトがある場合、使用する依存バージョンが一致している場合は、共通の依存を管理するPOMを定義し、各実際のプロジェクトにこのPOMのdependencyManagementをインポートできます.
6.   Mavenは、プラグインの管理を支援するpluginManagement要素も提供しています.この要素で構成された依存性は、実際のプラグイン呼び出し動作をもたらしません.POMで本物のplugin要素が構成され、groupIdおよびartifactIdがpluginManagementで構成されたプラグインと一致する場合、pluginManagementの構成は実際のプラグイン動作に影響します.
7.   プロジェクト内の複数のモジュールに同じプラグイン構成がある場合は、親POMのpluginManagement要素に構成を移動します.各モジュールが同じプラグインの特定の構成が異なる場合でも、親POMのpluginManagement要素を使用してプラグインのバージョンを統一的に宣言する必要があります.これにより、プロジェクトの役割のプラグインバージョンを統一できます.
8.   1つのPOMは、集約POMであり、親POMであってもよい.私たちは普通便利のためにそうすることができます.(サブPOMのrelativePathのデフォルト値は../pom.xmlを指しています)
9.   Mavenを使用するときは、コンフィギュレーションよりも約束が優れていることに注意してください.いずれのMavenプロジェクトもスーパーPOMから暗黙的に継承され、Maven 3の場合、スーパーPOMはlib/maven-model-builder-x.x.x.jarのorg/apache/maven/model/pom-4.0.0.xml、Maven 2の場合、lib/maven-x.x-uber.jarのorg/apache/maven/project/pom-4.0.0.xmlの下にある.ここでx.x.xは、Mavenの具体的なバージョン番号を表します.
10.   1つのマルチモジュールのMavenプロジェクトでは、Reactorはすべてのモジュールからなる構築構造を指す.単一モジュールのプロジェクトでは、Reactorはそのモジュール自体です.マルチモジュールプロジェクトでは,Reactorは各モジュール間の継承と依存関係を含み,合理的なモジュール構築順序を自動的に計算できる.
11.   実際のマルチモジュール構築順序は、MavenがPOM(集約モジュール自体が最初のPOM)を順番に読み出し、そのPOMが依存モジュールを持たない場合はそのモジュールを構築し、そうでなければ先にその依存モジュールを構築し、その依存モジュールが他のモジュールにも依存している場合はさらに依存依存の依存を構築するように形成されている.
12.   Mavenコマンドは、Reactorをリアルタイムで切り取るオプションを提供します.
-am,--also-make-plパラメータに記載されているモジュールの依存モジュールを同時に構築
-amd,--also-make-dependents-plパラメータにリストされているモジュールに依存するモジュールを同時に構築
-pl,--projects指定したモジュールを構築し、モジュール間をカンマで区切ります.
-rf,--resume-fromReactorで指定したモジュールから構築を開始し、Reactorが終了します.