Maven ==> 簡介

1、什麼是Mavenapache

  Maven是基於 POM(工程對象模型),經過一小段描述來對項目的代碼、報告、文件進管理的一個跨平臺的項目管理工具。Maven主要有兩大功能:管理依賴、項目構建api

2、Maven的安裝配置服務器

下載maven

http://maven.apache.org/download.cgiide

安裝過程直接解壓便可工具

配置環境變量測試

而後在Path中添加 %MAVEN_HOME%\bin阿里雲

測試url

在命令行窗口輸入:mvn -v 或 mvn -versionspa

配置Maven

一、全局配置

  在 Maven 安裝目錄的 conf 裏面有一個 settings.xml 文件,這個文件就是 Maven 的全局配置文件。settings.xml文件中設置包含本地倉庫路徑、遠程倉庫服務器地址等配置信息。

二、用戶配置

  用戶配置文件的地址:~/.m2/settings.xml,該文件默認沒有,須要將全局配置文件拷貝一份到該目錄下。若是用戶配置文件不存在,則使用全局配置文件的配置。

3、Maven 命令

Maven 命令要在 pom.xml 所在目錄中去執行

  • mvn compile
    • 編譯;
    • 完成編譯後,會生成target目錄,該目錄中存放了編譯後的字節碼文件;
  • mvn clean
    • 清除命令,清除已經編譯好的class文件,具體說清除的是target目錄中的文件;
    • 執行完畢後,會將target目錄刪除;
  • mvn test
    • 測試命令,該命令會將test目錄中的源碼進行編譯;
    • 執行完畢後,會在target目錄中生成三個文件夾:surefire、surefire-reports(測試報告)、test-classes(測試的字節碼文件);
  • mvn package
    • 打包;
    • 執行完畢後,會在target目錄中生成一個文件,該文件多是jar、war;
  • mvn install
    • 安裝命令,會將打好的jar包發佈到本地倉庫;
    • 執行完畢後,會在本地倉庫中出現安裝後的jar包,方便其餘工程引用;
  • mvn clean compile
    • 組合指令,先執行clean,再執行compile,一般應用於上線前執行,清除測試類;
  • mvn clean test
    • 組合指令,先執行clean,再執行test,一般應用於測試環節;
  • mvn clean package
    • 先執行 clean,再執行 package,將項目打包,一般應用於發佈前;
  • mvn clean install
    • 先執行clean,再執行install,將項目打包而後發佈到本地倉庫當中;

4、Maven的核心概念

一、座標

  在 Maven 中,座標的做用就是定位一個惟一肯定的 jar 包。Maven世界擁有大量構建,經過座標,咱們就能從 Maven 倉庫中引用指定的 jar 包進行構建。

Maven 座標的組成

  • groupId:定義當前Maven的組名
  • artifactId:定義當前項目名稱
  • version:定義當前項目的版本

二、依賴管理

依賴範圍

依賴範圍用 scope 標籤來控制依賴和編譯,測試,運行的classpath的關係. 主要的是三種依賴關係以下:

  • compile:默認編譯依賴範圍,對於編譯、測試、運行三種 classpath 都有效;
  • test:測試依賴範圍,只對於測試 classpath 有效;
  • provided:已提供依賴範圍,對於編譯、測試的 classpath 都有效,但對於運行無效。例如:因爲容器已經提供,因此運行時不須要,如 servlet-api;
  • runtime:運行時依賴範圍,例如:jdbc驅動;

依賴傳遞

某項目工程下有A、B、C三個模塊,B模塊依賴A模塊,C模塊依賴B模塊,那麼B模塊是C模塊的直接依賴,A模塊是C模塊的間接依賴。也就是說:

  • C直接依賴B
  • C間接依賴A

咱們分別在C模塊和B模塊的 pom.xml 文件中加入以下配置:

<dependencies>
    <dependency>
        <groupId>com.test.maven</groupId>
        <artifactId>B</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
POM--C
<dependencies>
    <dependency>
        <groupId>com.test.maven</groupId>
        <artifactId>A</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
POM--B

從上圖能夠看出,雖然C沒有直接依賴於A,可是經過簡介依賴,C也能夠調用A中的類和方法;

而後咱們在A模塊的 pom.xml 文件中引入 Junit4.12,以下:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
POM--A

能夠看到:當 scope 標籤中的值爲 compile 時,直接依賴和間接依賴的模塊都能使用。

總結:

  • 當A範圍是compile的時候,B和C可以使用。
  • 當A的範圍是test的時候,B和C不能使用。
  • 當A的範圍是provided的時候,B和C不能使用;
  • 當A的範圍是runtime的時候,B和C可以使用;

依賴衝突

跨 Pom 文件的衝突

A模塊的 Pom文件中依賴了 Junit 4.12版本,而B模塊的 Pom文件中依賴了Junit 4.10版本,那麼B 和 C都將使用 Junit 4.10版本,以下圖:

同一個 Pom 文件的衝突

B模塊的 Pom文件中依賴了Junit 4.10 和 Junit 4.12兩個版本,則以放在下面的版本爲準,就近原則。

可選依賴

Optional標籤標示該依賴是否可選,默認是false,表示該依賴會傳遞下去,若是爲true,則表示不會傳遞下去。

排除依賴

在 C模塊的 Pom 文件中加入 Exclusions 標籤排除 Junit 依賴

三、繼承

若是全部模塊都須要用到某個 jar 包,咱們只須要在工程那一級別的 Pom文件中設置便可。

把 A、B、C的依賴關係去掉,統一在工程的 Pom文件進行 jar 包的依賴設置,該工程下的全部模塊都能使用該 jar包了。

5、Maven 倉庫

什麼是 Maven倉庫

用來統一存儲全部Maven共享構建的位置就是倉庫。根據Maven座標定義每一個構建在倉庫中惟一存儲路徑大體爲:groupId/artifactId/version/artifactId-version.packaging;

倉庫的分類

6、遠程倉庫配置介紹

中央倉庫/遠程倉庫

從 Maven安裝沒了下的 conf 中拷貝setting.xml文件放入~/.m2/repository目錄下,在 mirrors標籤下增長配置,能夠配置多個,以下:

<!-- 配置遠程鏡像,即依賴包下載地址 --> 
<mirrors>
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        
        <mirror>
            <id>central</id>
            <name>Maven Repository Switchboard</name>
            <url>http://repo1.maven.org/maven2/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        
        <!-- 中央倉庫在中國的鏡像 -->
        <mirror>
            <id>maven.net.cn</id>
            <name>oneof the central mirrors in china</name>
            <url>http://maven.net.cn/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
</mirrors>

本地私服

認證信息

<!--配置私服倉庫認證信息-->
<servers>
    <server>
            <id>proj-releases</id>
            <username>deployment</username>
            <password>deployment</password>
        </server>
            
        <server>
            <id>proj-snapshot</id>
            <username>deployment</username>
            <password>deployment</password>
        </server>
</servers>

配置私服地址

<profiles>
    <profile>
          <id>nexus</id>
          <!-- 配置使用公司私服進行jar包下載 -->
          <repositories>
              <repository>
                  <id>nexus-pub</id>
                  <name>Nexus-Pub</name>
                  <url>http://192.168.0.1:8080/nexus/content/groups/public/</url>
                  <releases><enabled>true</enabled></releases>
                  <snapshots>
                      <enabled>true</enabled>
                  </snapshots>
              </repository>
          </repositories>
          <!-- 配置使用公司私服進行maven插件下載 -->
          <pluginRepositories>
              <pluginRepository>
                  <id>nexus</id>
                  <name>Nexus</name>
                  <url>http://192.168.0.1:8080/nexus/content/groups/public/</url>
                  <releases><enabled>true</enabled></releases>
                  <snapshots><enabled>true</enabled></snapshots>
              </pluginRepository>
          </pluginRepositories>
    </profile>
</profiles>

咱們還能配置將包構建至私服

<distributionManagement>
        <repository>
            <id>releases</id>
            <name>public</name>
            <url>http://192.168.0.1:8080/nexus/content/repositories/releases</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url>http://192.168.0.1:8080/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
</distributionManagement>

  distributionManagement包含repository和snapshotRepository子元素,前者表示發佈版本(穩定版本)構件的倉庫,後者表示快照版本(開發測試版本)的倉庫。這兩個元素都須要配置id、name和url,id爲遠程倉庫的惟一標識,name是爲了方便人閱讀,關鍵的url表示該倉庫的地址。
往遠程倉庫部署構件的時候,每每須要認證,配置認證的方式同上。

  配置正確後,運行命令mvn clean deploy,Maven就會將項目構建輸出的構件部署到配置對應的遠程倉庫,若是項目當前的版本是快照版本,則部署到快照版本的倉庫地址,不然就部署到發佈版本的倉庫地址。

相關文章
相關標籤/搜索