maven複数のサブプロジェクト、親プロジェクト間の参照の問題


に引くhttp://blog.csdn.net/whuslei/article/details/7989102
に質問
以下は簡単なプロジェクト構造図です.
Parent`------ childA(BusinessLayer)          `--- pom.xml`------ childB(WebLayer)         `--- pom.xml`------ pom.xml
1、ParentはどうしてchildAとchildBを見つけることができますか?
mavenではparentモジュールがchildAとchildBを組織し、「集約」と呼ばれ、複数のモジュールが共同でコンパイルされます.実現は簡単で、parentのpomファイルに以下の内容を加えるだけです.
<modules>
   <module>childAmodule>
   <module>childBmodule>
modules>

2、こう書けばOKなのかな?
これはmavenコンパイラにparentのpomファイルを読み込むときにchildAとchildBを見つけるように伝えるだけですが、導入した依存関係をそれぞれコンパイルします.これによりpomファイルが導入されたパッケージが重複します!!そこで我々は「継承」の概念を導入し,すなわち「親子」関係を形成し,子pomは親pomに導入された依存を参照できる.具体的な方法は以下の通りです.
parentでは、「*」で識別された行がパスを構成し、maven倉庫でこのpomファイルを見つけることができます.この例ではpathはM 2_Path/com/sang/main/Parent-Moduel/1.0.2/xxxx-1.0.2.pom.だからこの3つのラベルは必須です!!!
<modelVersion>4.0.0modelVersion>  
<groupId>com.sang.maingroupId>              *
<artifactId>Parent-ModuelartifactId>         *
<version>1.0.2version>            *
<packaging>pompackaging>  
<name>Simple-mainname>

親pomが書き終わったら、子pomはラベルで親pomの依存を継承します.以下のようにします.
<parent>
   <groupId>com.sang.maingroupId>
   <artifactId>Parent-ModuelartifactId>
   <version>1.0.2version>
   <relativePath>../pom.xmlrelativePath>  
parent>

注目すべきはラベルであり,pomの階層関係が本例のように1層だけ隔てられている場合はこれを省略することができる.mavenも同様にサブpomを見つけることができます.
子pomにラベルを導入すると、親pomから継承されるなどの属性があります.例えばchildAは次のような内容を追加するだけです.
<modelVersion>4.0.0modelVersion>  
<groupId>com.sang.businessgroupId>     
<artifactId>ChildA-moduleartifactId>
<packaging>jarpackaging>         
<name>childAname>

3、依存を追加する方法
mavenはjarパッケージ依存性を容易に管理できます.具体的な方法は以下の通りです.
<dependencies>
     <dependency>   
         <groupId>javax.servletgroupId>
        <artifactId>servlet-apiartifactId>
        <version>2.5version>
    dependency>
dependencies>


継承しない場合は、pomに対応するモジュールがこのjarパケットを参照できるように、各pomにこのような依存を加える必要があります.上記のjarパッケージの繰り返し参照は、次の方法で解決できます.
主pomで依存を引き起こすことで,サブpomが使用する可能性のあるjarパケット依存を表す.
<dependencyManagement>
   <dependencies>
      <dependency>
           <groupId>javax.servletgroupId>
          <artifactId>servlet-apiartifactId>
          <version>2.5version>
      dependency>
   dependencies>
dependencyManagement>


サブpom jarパッケージを参照する必要がある場合は、直接参照してください.加入する必要がなく、統一管理が容易です.また、サブpomでのみ使用されるjarパッケージを追加することもできます.たとえば、次のようにします.
<dependencies>
   <dependency>
        <groupId>javax.servletgroupId>
        <artifactId>servlet-apiartifactId>   
   dependency>
   <dependency>
       <groupId>org.codehaus.jacksongroupId>
       <artifactId>jackson-core-lgplartifactId>
       <version>1.9.4version>    
   dependency>
dependencies>


4、jarパッケージ依存に加えて、プラグインはこのような方法で管理することができる

<build>
   <pluginManagement>
      <plugins>
          <plugin>
               <groupId>org.apache.maven.pluginsgroupId>
               <artifactId>maven-source-pluginartifactId>
               <version>2.1.1version>
          plugin>
      plugins>
   pluginManagement>
build>


<build>   
   <plugins>
      <plugin>
           <groupId>org.apache.maven.pluginsgroupId>
           <artifactId>maven-source-pluginartifactId>
      plugin>
   plugins>
build>


5、childAがchildBのjarパッケージを参照しているなど、サブpom間に参照関係がある場合は、どうすればいいですか.
<dependency>
   <groupId>com.modulegroupId>
   <artifactId>childAartifactId>       
   <version>1.0.0version>
dependency>