Maven裏面的Jar包經常出現Missing的情況,無外乎幾種情況:
1、私服裏面沒有相應的版本號的Jar包或者Jar包沒寫版本號
2、Jar包引錯了,相應的依賴關係也就錯了
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所定義的版本。