Maven使用入門/安裝/配置

Maven使用入門

1. Maven概述

Maven是什么?
Maven項目對象模型(POM),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。
為什么要使用Maven?
Maven 除了以程序構建能力為特色之外,還提供高級項目管理工具。由于 Maven 的缺省構建規則有較高的可重用性,所以常常用兩三行 Maven 構建腳本就可以構建簡單的項目。由于 Maven 的面向項目的方法,許多 Apache Jakarta 項目發文時使用 Maven,而且公司項目采用 Maven 的比例在持續增長。
Maven的特點
Maven 和 Ant 有什么不同呢?在回答這個問題以前,首先要強調一點:Maven 和 Ant 針對構建問題的兩個不同方面。Ant 為 Java 技術開發項目提供跨平臺構建任務。Maven 本身描述項目的高級方面,它從 Ant 借用了絕大多數構建任務。因此,由于 Maven 和 Ant代表兩個差異很大的工具,所以接下來只說明這兩個工具的等同組件之間的區別,如表 1 所示:

表1

Maven常用命令

mvn archetype:generate 創建Maven項目
mvn compile 編譯源代碼
mvn deploy 發布項目
mvn test-compile 編譯測試源代碼
mvn test 運行應用程序中的單元測試
mvn site 生成項目相關信息的網站
mvn clean 清除項目目錄中的生成結果
mvn package 根據項目生成的jar
mvn install 在本地Repository中安裝jar
mvn eclipse:eclipse 生成eclipse項目文件
mvnjetty:run 啟動jetty服務
mvntomcat:run 啟動tomcat服務
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳過測試類

Maven的基本功能

? 構建:比如生成class、jar、war或者ear文件
? 生成文檔:比如生成javadoc、網站文檔
? 生成報告:比如junit測試報告
? 生成依賴類庫:生成文檔,說明項目多其他軟件的依賴
? 有關SCM:SCM(Software Configuration Management),軟件配置管理,比如版本控制,比如bug管理等等
? 發布:生成供發布的分發包,比如生成Struts2的分發包,供提交給用戶使用
? 部署:比如,web應用程序,自動部署到指定的服務器上

maven的其他優勢

  • maven不僅是構建工具,它還是依賴管理工具和項目管理工具,提供了中央倉庫,能夠幫我們自動下載構件。
  • 為了解決的依賴的增多,版本不一致,版本沖突,依賴臃腫等問題,它通過一個坐標系統來精確地定位每一個構件(artifact)。
  • 幫助我們分散在各個角落的項目信息,包括項目描述,開發者列表,版本控制系統,許可證,缺陷管理系統地址。
  • maven還為全世界的java開發者提供了一個免費的中央倉庫,在其中幾乎可以找到任何的流行開源軟件。通過衍生工具(Nexus),我們還能對其進行快速搜索
  • maven對于目錄結構有要求,約定優于配置,用戶在項目間切換就省去了學習成本。

2. Maven 安裝以及eclipse配置

  1. 在apche官方網站http://maven.apache.org/download.cgi 下載bin;
  2. 下載下來之后,解壓,找個路徑放進去, 把bin的位置設在環境變量里,新建環境變量MAVEN_HOME;


  3. 在PATH里加入maven的bin的路徑;


  4. 由于Maven依賴Java運行環境,因此使用Maven之前需要配置Java的運行環境。下載并安裝JDK,配置JDK的環境變量JAVA_HOME,否則maven將無法使用;
  5. 配置完畢后,在Windows命令提示符下,輸入mvn -v測試一下,配置成功顯示如圖:


  6. 配置成功后開始在Eclipse中配置Maven,點擊eclipse菜單欄Help->Eclipse Marketplace搜索關鍵字maven到插件Maven Integration for Eclipse 并點擊安裝即可,如下圖:




  7. 安裝完畢后,點擊重啟eclipse;
  8. 重啟后,為了使得Eclipse中安裝的Maven插件,同windows中安裝的那個相同,需要讓eclipse中的maven重新定位一下,點擊Window -> Preference -> Maven -> Installation -> Add進行設置


  9. 然后, 我們在Maven的配置界面,設置User Settings Global Settings選擇maven 安裝目錄下conf文件夾下的settings.xml,這里我的Maven安裝目錄為D:\apache-maven-3.5.2\conf\settings.xml,選擇你的Maven安裝目錄,檢查Local Repository 項,如果為D:\Qrsoft\maven\repository則配置成功,否則重新配置上一步。


  10. 設置成功即安裝完成。

3. 使用

3.1 創建Maven項目
  1. 我們在Eclipse菜單欄中點擊File->New->Other->Maven,在彈出的對話框中會看到,如下圖所示:


  2. 選擇Maven Project,請選中Create a simple project(skip archetype selection),之后點擊Next;
  3. 選擇”maven-archetype-webapp";



    填寫Group id和Artifact id, Version默認,Packaging默認為jar,Name,Description選填,其他的不填(這里我已經創建過該項目了,所以會提示already exists) 。


  4. 創建好項目后,目錄如下:


  5. 至此,項目已經創建完畢,下邊開始配置;
  6. 添加Source Folder:
    Maven規定,必須創建以下幾個Source Folder
    src/main/resources
    src/main/java
    src/test/resources
    src/test/java
    添加以上的Source Folder(如果已經存在,可忽略此步驟),添加完后,如下圖所示:


  7. 配置Build Path;



    設定4個文件夾的輸出Output folder,雙擊修改:



    分別修改輸出路徑為
    src/main/resources  對應  target/classes

    src/main/java  對應  target/classes
    src/test/resources  對應  target/test-classes
    src/test/java  對應  target/test-classes

修改后如下圖:


  1. 設定Libraries


  2. 完成,接下來就可以編寫自己的程序了。
3.2 Maven項目的目錄約定
3.3 pox.xml解讀

(1). modelVersion
指定了當前Maven模型的版本號,對于Maven2和Maven3來說,它只能是4.0.0;
(2). groupId
顧名思義,這個應該是公司名或是組織名。一般來說groupId是由三個部分組成,每個部分之間以"."分隔,第一部分是項目用途,比如用于商業的就是"com",用于非營利性組織的就是"org";第二部分是公司名,比如"tengxun"、"baidu"、"alibaba";第三部分是你的項目名
(3). artifactId
可以認為是Maven構建的項目名,比如你的項目中有子項目,就可以使用"項目名-子項目名"的命名方式
(4). Version
版本號,SNAPSHOT意為快照,說明該項目還在開發中,是不穩定的版本。在Maven中很重要的一點是,groupId、artifactId、version三個元素生成了一個Maven項目的基本坐標,這非常重要!
在上面的這些元素之外,還有一些元素,同樣羅列一下:

  1. Packing
    項目打包的類型,可以使jar、war、rar、ear、pom,默認是jar;
  2. dependencies和dependency
    前者包含后者。前面說了,Maven的一個重要作用就是統一管理jar包,為了一個項目可以build或運行,項目中不可避免的,會依賴很多其他的jar包,在Maven中,這些依賴就被稱為dependency。

說到這里,就有一個本地倉庫遠程倉庫的概念了。官方下載的本地倉庫的配置在"%MAVEN_HOME%\conf\settings.xml"里面,找一下"localRepository"就可以了(可以自己定義下載下來的jar包的存放位置,見https://www.cnblogs.com/xdp-gacl/p/3498271.html );MyEclipse默認的本地倉庫的地址在"{user.home}/.m2/repository"路徑下,同樣找一下"localRepository"就可以找到MyEclipse默認的本地倉庫了。

本地倉庫和遠程倉庫是這樣的,Maven工程首先會從本地倉庫中獲取jar包,當無法獲取指定jar包時,本地倉庫會從遠程倉庫(中央倉庫)中下載jar包,并放入本地倉庫以備將來使用。

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

<dependencies>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.5</version>

</dependency>

</dependencies>

之前有說過groupId、artifactId、version唯一標識一個Maven項目,有了這三個元素,我們就可以去遠程倉庫下載MyBatis3.2.5.jar到本地倉庫了。回想我們之前的做法,如果要MyBatis的jar包,發現沒有,然后去網上下載一個,需要另外的jar包,然后去網上下載一個,但是有了Maven,就方便多了,只需要配置jar包對應的dependency依賴,Maven會自動幫助我們去遠程倉庫中下載jar包到本地倉庫中。

  1. properties
    properties是用來定義一些配置屬性的,例如project.build.sourceEncoding(項目構建源碼編碼方式),可以設置為UTF-8,防止中文亂碼,也可定義相關構建版本號,便于日后統一升級。
  2. build
    build表示與構建相關的配置,比如build下有finalName,表示的就是最終構建之后的名稱。
3.4添加本地jar包
  1. 首先我在項目根目錄中創建一個lib文件夾,將jar包拷貝到lib文件夾下:


  2. 然后我們在maven的pom.xml中配置:
    <dependency>
    <groupId>com.localjar.jar1</groupId>
    <artifactId>jar1</artifactId>
    <version>0.0.1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/hadoop-ext.jar
    </systemPath>
    </dependency>
    <dependency>
    <groupId>com.localjar.jar2</groupId>
    <artifactId>jar2</artifactId>
    <version>0.0.1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/mr.proj.jar
    </systemPath>
    </dependency>
    這里的groupId和artifactId以及version都是可以隨便填寫的 ,scope必須填寫為system,而systemPath寫現在我們jar包的地址就可以了;
3.5 添加外部jar包
  1. 去mvnrepository 官網 http://mvnrepository.com/ 查找需要的jar包,復制dependency代碼到pom.xml中即可。
    例如想查找org.apache.commons.lang.StringUtils,可以輸入commons,


    點一個適合的版本,例如我選2.6:

    把代碼拷貝到pom的<dependencies></ dependencies >中即可。

4. Maven入門使用常見問題

說明:這些問題有的是從網上找的,有的是我自己遇到的,能否解決您的問題視情況而定,具體問題還要具體分析,不行就找度娘哈。

  1. 我從SVN上下載了一個以Maven構建的工程,下載完畢沒有jar包怎么辦?
    從資源庫上下載下來的Maven工程,是沒有jar包的,此時可以這么做:
    (1)刪除Maven工程,但是刪除的時候不要刪除本地工程里面的Maven工程,只刪除MyEclipse中的Maven工程
    (2)右鍵Import->Maven4MyEclipse->Existing Maven Projects,導入你的Maven工程,此時MyEclipse在構建工程的時候,假如你的本地倉庫中沒有dependcy中的jar包,便會去遠程倉庫下載jar包到本地倉庫中。你的工程導入完畢之后,Library應該是這樣的:


  2. 重新下載Maven工程所依賴的jar包、導入jar包都需要觸發Maven工程的build workspace,那么如何才能觸發Maven工程的build workspace?
    找到一個pom.xml,隨便修改一下,加一個空格、減一個空格什么的,ctrl+s保存一下,便會觸發Maven工程的build workspace了
  3. 本地倉庫的目錄結構是什么樣子的?
    groupId、artifactId、version確定一個唯一的Maven,比方說我有一個mybatis的dependcy:
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.5</version>
    </dependency>
    那么mybatis的jar包應該在%Maven倉庫地址%\org\mybatis\mybatis\3.2.5\這一路徑下,看到了吧,先groupId,再mybatis,最后version,每個名字都是一個文件夾的名字
  4. 有些jar包在dependcy里面有配置,Import了Maven工程,下載完工程所依賴的jar包之后,發現本地倉庫里面卻沒有,怎么辦?
    可能是原先下載jar包的時候出了什么問題,從artifactId目錄開始刪除以下的所有文件/文件夾,然后觸發一次Maven工程的build workspace就可以了
  5. 本地倉庫中確定已經有jar包了,工程里面卻報錯,說找不到jar包,該怎么辦?
    應該有很多解決辦法,目前解決的一種辦法是,MyEclipse->Window->Preferences->搜索Maven->User Settings,Update Settings和Reindex點一下就好了。另外,可以嘗試一下把本地Maven倉庫內的jar包刪除一下,然后重新build workspace,可能也可以。
  6. 項目上有紅叉提示錯誤,但是整個項目沒有任何文件有錯,怎么辦?
    解決辦法就是:
    右鍵項目,【Maven】--》【Update Project Configuration...】即可。
  7. Maven構建項目后項目報Error錯誤Java compiler level does not match the version of the installed Java project facet。
    項目->右鍵->Project Facets->修改facets中java版本(下拉箭頭出)為要用的版本
    Maven構建項目需注意
    1.項目右鍵->Preferences->buildpath->jdk版本
    2.項目右鍵->Preferences->javacompiler->jdk版本
    3.項目右鍵->Preferences->ProjectFacets->jdk版本

先講這些哈,如有錯誤,歡迎指正。
喜歡別忘點個攢哈,筆芯~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。