1. 程式人生 > 其它 >第四章 Maven-依賴管理

第四章 Maven-依賴管理

一、依賴管理概述

除非專案特別小,通常一般專案都會依賴外部jar包。這些jar包管理是非常繁瑣的,jar包會依賴其他jar包,如果手工管理必須把所有這些jar都放到專案目錄下,並且確保這些jar包的版本是正確的。當專案變得越來越大時,這項工作將變得更加繁瑣。

使用Maven管理這些依賴的jar包,將大大簡化工作。可以在POM檔案中指定專案所依賴的外部庫以及版本,然後maven將下載這些jar包,並放入本地庫中。如果某些外部jar包需要其他jar包,maven也會下載。

在POM檔案的<dependencies>元素中指定專案依賴項。

二、依賴管理示例

# 示例:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test.demo</groupId>
    <artifactId>mybatis-demo</artifactId>
    <version>0.0.1</version>  
    <packaging>jar</packaging>  

    <name>mybatis demo </name>  
    <url>http://www.qikegu.com</url>  

    <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.11.3</version>
    </dependency>


    <dependencies>  
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13-beta-2</version>
            <scope>test</scope>
        </dependency>

    </dependencies>  

</project>  
上面配置了2個依賴項。每個依賴項都由groupId、artifactId和版本描述。

當Maven執行這個POM檔案時,如果本地庫中沒有這2個依賴項,maven將從中央庫去下載它們並放入本地庫。

有時中央庫也沒有需要的依賴項,如一些第三方jar包,開發人員可以自己手動下載,然後放到本地庫中。本地庫的jar包目錄必須匹配<dependency>中的配置,目錄格式是:

groupId/artifactId/version

groupId中如果有點(.)替換成斜槓(/),如上面jsoup jar包所在的目錄是:

MAVEN_REPOSITORY_ROOT/org/jsoup/jsoup/1.11.3

三、傳遞依賴

一個依賴項依賴於其他依賴項,maven會傳遞這些依賴,把所有需要的依賴項都包含進來。

四、外部依賴

外部依賴是指在maven中央庫,本地庫,遠端庫都不存在的jar包,如本地硬碟中的jar包。

可通過如下方式配置外部依賴項:

<dependency>
  <groupId>com.qikegu.com</groupId>
  <artifactId>mydependency</artifactId>
  <scope>system</scope>
  <version>1.0</version>
  <systemPath>${basedir}\war\WEB-INF\lib\mydependency.jar</systemPath>
</dependency>


groupId和artifactId都設定為依賴項的名稱,scope元素值被設定為system。systemPath元素被設定為指向包含依賴項的JAR檔案的位置,${basedir}指向POM所在的目錄,路徑的其餘部分與該目錄相對應。

五、快照依賴

快照依賴是指依賴項使用正在開發中的最新版本(快照版本),每次構建總是下載最新的快照版本。

如需使用某個版本的快照版本,版本號後附加`-SNAPSHOT`:

<dependency>
    <groupId>com.qikegu.com</groupId>
    <artifactId>mydependency</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

六、排除依賴

由於Maven會傳遞依賴,有時可能包含不需要的依賴項,例如,某個較老的jar可能與當前使用的Java版本不相容。為了解決這個問題,Maven允許你排除特定的依賴項:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- 宣告排除的依賴項 -->
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
  </dependencies>
</project>

maven在執行構建時,將不會下載儲存被排除的依賴項