1. 程式人生 > >Maven實戰(二)---多模組開發---缺少Jar包

Maven實戰(二)---多模組開發---缺少Jar包

Maven裡面的Jar包經常出現Missing的情況,無外乎幾種情況:

1、私服裡面沒有相應的版本號的Jar包或者Jar包沒寫版本號

2Jar包引錯了,相應的依賴關係也就錯了

3、引入了依賴的Jar包,沒被管理起來

       第一二個問題解決起來挺簡單的,第三個問題對於不理解Maven的還需要解決一番。

       其實第三個問題就存在與Maven<dependencies>節點與<dependencymanagement>節點。

                     <dependencies>節點是專案依賴,專案所依賴的Jar包;

                    <

dependencymanagement>節點是多模組Maven專案開發的時候的依賴管理控制的。

在多模組開發的時候,利用專案繼承可以將結構資訊、部署資訊,將共同的依賴放在一個父類中。每個子專案的pom繼承父類的pom中的依賴關係。這樣就解決了所有的子專案的依賴項統一版本。所以為了專案的正確執行,必須讓而在父類中將這些Jar包管理起來,在父專案的pom中定義共同的依賴關係。這就是依賴管理。

來看一下這兩個節點的程式碼:

Project A
<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>maven</groupId>
 <artifactId>A</artifactId>
 <packaging>pom</packaging>
 <name>A</name>
 <version>1.0</version>
 <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>test</groupId>
       <artifactId>a</artifactId>
       <version>1.2</version>
     </dependency>
     <dependency>
       <groupId>test</groupId>
       <artifactId>b</artifactId>
       <version>1.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>test</groupId>
       <artifactId>c</artifactId>
       <version>1.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>test</groupId>
       <artifactId>d</artifactId>
       <version>1.2</version>
     </dependency>
   </dependencies>
 </dependencyManagement>
</project>
Project B
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>maven</groupId>
  <artifactId>B</artifactId>
  <packaging>pom</packaging>
  <name>B</name>
  <version>1.0</version>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>A</artifactId>
        <version>1.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>test</groupId>
        <artifactId>d</artifactId>
        <version>1.0</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>test</groupId>
      <artifactId>a</artifactId>
      <version>1.0</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>test</groupId>
      <artifactId>c</artifactId>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</project>

區別:

         <dependencies>中的jar直接加到專案中,管理的是依賴關係(如果有父pom,pom,則子pom中只能被動接受父類的版本);<dependencyManagement>主要管理版本,對於子類繼承同一個父類是很有用的,集中管理依賴版本不新增依賴關係,對於其中定義的版本,子pom不一定要繼承父pom所定義的版本。