初識maven


Maven是什么?


Maven是一個項目管理和綜合工具。Maven提供了開發人員構建一個完整的生命周期框架。開發團隊可以自動完成項目的基礎工具建設,Maven使用標准的目錄結構和默認構建生命周期。 我們經常用的就是jar包的管理。

 

Maven POM


POM( Project Object Model,項目對象模型 ) 是 Maven 工程的基本工作單元,是一個XML文件,包含了項目的基本信息,用於描述項目如何構建,聲明項目依賴,等等。

在創建 POM 之前,我們首先需要描述項目組 (groupId), 項目的唯一ID。

<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>
    <!-- 公司或者組織的唯一標志,並且配置時生成的路徑也是由此生成, 如com.companyname.project-group,maven會將該項目打成的jar包放本地路徑:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- 項目的唯一ID,一個groupId下面可能多個項目,就是靠artifactId來區分的 -->
    <artifactId>project</artifactId>
 
    <!-- 版本號 -->
    <version>1.0</version>
    <packaging>jar</packaging>
</project>

所有 POM 文件都需要 project 元素和三個必需字段:groupId,artifactId,version。

 

節點 描述
project 工程的根標簽。
modelVersion 模型版本需要設置為 4.0。
groupId 這是工程組的標識。它在一個組織或者項目中通常是唯一的。例如,一個銀行組織 com.companyname.project-group 擁有所有的和銀行相關的項目。
artifactId 這是工程的標識。它通常是工程的名稱。例如,消費者銀行。groupId 和 artifactId 一起定義了 artifact 在倉庫中的位置。
version

這是工程的版本號。在 artifact 的倉庫中,它用來區分不同的版本。例如:

com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1
packaging 項目打包的類型,可以使jar、war、rar、ear、pom,默認是jar

 

dependencies和dependency

  前者包含后者。前面說了,Maven的一個重要作用就是統一管理jar包,為了一個項目可以build或運行,項目中不可避免的,會依賴很多其他的jar包,在Maven中,這些依賴就被稱為dependency。

  說到這里,就有一個本地倉庫和遠程倉庫的概念了。本地倉庫和遠程倉庫是這樣的,Maven工程首先會從本地倉庫中獲取jar包,當無法獲取指定jar包時,本地倉庫會從遠程倉庫(中央倉庫)中下載jar包,並放入本地倉庫以備將來使用。本次倉庫路徑:c:\用戶\{找到計算機用戶}\.m2。遠程倉庫默認使用的是http://repo2.maven.org/maven2/,但是我們也可以修改。

 

  舉個例子,比方說我的項目中用到了MyBatis,那么pom可以添加這段配置:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.2.5</version>
    </dependency>
</dependencies>

 

點擊ctrl+s保存,Eclipse就會自動到遠程倉庫里下載mybatis的jar包到本地倉庫,通過groupId、artifactId、version唯一標識一個Maven項目,有了這三個元素,我們就可以去遠程倉庫下載,如果本地倉庫里已經有該jar包了,則不會到遠程倉庫下載。

properties


properties是用來定義一些配置屬性的,例如project.build.sourceEncoding(項目構建源碼編碼方式),可以設置為UTF-8,防止中文亂碼,也可定義相關構建版本號,便於日后統一升級。通過${}可以在dependency引用該模塊定義的屬性。

<properties>
    <mybatis.version>3.2.5</mybatis.version>
  </properties>
  <dependencies>
    <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>${mybatis.version}</version>
      </dependency>
    </dependencies> 

 

如上代碼,我們在properties中定義了一個mybatis.version的屬性,然后再下面的version里面就可以引用該屬性了。

遠程倉庫修改


<repositories>
    <repository>
        <id>Dcm4Che</id>
        <name>Dcm4Che</name>
        <url>http://www.dcm4che.org/maven2/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

 

 

標簽的含義如下:

  • id maven倉庫的id(自定義)

  • name maven倉庫的名稱(自定義)

  • url maven倉庫的url(可以替換為阿里的鏡像倉庫:http://maven.aliyun.com/nexus/content/groups/public/,可以是自己搭建的maven私服)

  • releases maven倉庫中版本為release的包

  • snapshots maven倉庫中版本為snapshots的包

Maven 構建生命周期


一個典型的 Maven 構建(build)生命周期是由以下幾個階段的序列組成的:

階段 處理 描述
驗證 validate 驗證項目 驗證項目是否正確且所有必須信息是可用的
編譯 compile 執行編譯 源代碼編譯在此階段完成
測試 Test 測試 使用適當的單元測試框架(例如JUnit)運行測試。
包裝 package 打包 創建JAR/WAR包如在 pom.xml 中定義提及的包
檢查 verify 檢查 對集成測試的結果進行檢查,以保證質量達標
安裝 install 安裝 安裝打包的項目到本地倉庫,以供其他項目使用
部署 deploy 部署 拷貝最終的工程包到遠程倉庫中,以共享給其他開發人員和工程

常用的maven命令如下:

1. 編譯源代碼:

mvn compile

 

2. 運行測試:

mvn test

 

3. 打包:

mvn package

 

4.打包到本地倉庫(.m2路徑下)

mvn install

 

5.清除產生的項目(清楚target目錄文件)

mvn clean

 

6.上傳到私服

mvn deploy

 

7.組合命令

mvn clean install --清楚打包

mvn -Dtest package 跳過測試 只打包

 

文章參考

http://www.runoob.com/maven/maven-tutorial.html

https://www.yiibai.com/maven

https://www.cnblogs.com/hongwz/p/5456578.html

作者: Eric.Chen
出處: https://www.cnblogs.com/lc-chenlong
如果喜歡作者的文章,請關注“寫代碼的猿”訂閱號以便第一時間獲得最新內容。本文版權歸作者所有,歡迎轉載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM