Maven基礎與環境構建

Maven官網

Maven搜索庫

一.Maven簡介

maven是一個Apache下的一個純Java開發的開源項目

定義:

Maven是一個項目管理工具,它包含了一個項目對象模型,一組標準集合,一個項目生命週期,一個依賴管理系統,和用來運行定義在生命週期階段中插件目標的工具。

(1)Maven能解決什麼問題:

通俗的講:我們知道,項目開發不就僅僅是寫寫代碼而已,期間會伴隨着各種比不可少的事情要做,下面列舉幾個例子:

  • 我們需要引用各種jar包,尤其是比較大的工程,引用的jar包往往有幾十個乃至上百個,每用到一種jar包,都需要手動引入工程目錄,而且經常遇到各種讓人抓狂的jar包衝突,版本衝突。
  • 我們寫好的java文件,需要通過javac編譯成class文件才能交給JVM運行。這項工作可以由各種集成開發工具幫我們完成 Eclipse、IDEA 等都可以將代碼即時編譯。
  • 世界上沒有不存在 bug 的代碼,因此寫完了代碼,我們還要寫一些單元測試,然後一個個的運行來檢驗代碼質量。
  • 再優雅的代碼也是要出來賣的。我們後面還需要把代碼與各種配置文件、資源整合到一起,進行打包。如果是 web 項目,還需要將之發佈到服務器 。

如果現在有一種工具,可以把你從上面的繁瑣工作中解放出來,能幫你構建工程,管理 jar包,編譯代碼,還能幫你自動運行單元測試,打包,生成報表,甚至能幫你部署項目,生成 Web 站點,你會用嗎? Maven 就可以解決上面所提到的這些問題。

(2)Maven的兩個核心功能

依賴管理:

* 傳統的 WEB 工程中,我們必須將工程所依賴的 jar 包複製到工程中,導致了工程的變得很大。

* maven的 WEB 工程中不直接將jar包導入到工程中,而是通過在 pom.xml 文件中添加所需jar包的座標。項目運行時,通過讀取座標到一個專門用於“存放jar包倉庫"(Maven倉庫)找到相應的jar包。

倉庫如何存放jar包?

(3)項目構建:

我們的項目,往往都要經歷編譯、測試、運行、打包、安裝 ,部署等一系列過程。
 
什麼是項目構建? 指的是項目從編譯、測試、運行、打包、安裝 ,部署整個過程都交給maven進行管理,這個過程
稱爲構建。 一鍵構建 指的是整個構建過程,使用maven一個命令可以輕鬆完成整個工作。
 
 
Maven規範化構建流程如下:
 

 

二.Maven安裝和使用

(1)Maven下載和安裝

下載:

Maven官網下載地址 :http://maven.apache.org/download.cgi

Maven官網下載地址

安裝:

Maven下載後,將Maven解壓到一個沒有中文沒有空格的路徑下。 解壓後目錄結構
如下:
 

Maven使用java語言開發的,解壓即可運行
 注意:maven依賴 JAVA_HOME

目錄:

* bin:存放了 maven 的命令,比如我們前面用到的 mvn tomcat7:run
 
* boot:存放了一些 maven 本身的引導程序,如類加載器等
 
* conf:存放了 maven 的一些配置文件,如 setting.xml 文件
 
* lib:存放了 maven 本身運行所需的一些 jar
 
至此我們的maven軟件就可以使用了,前提是你的電腦上之前已經安裝並配置好了JDK
 
Maven及JDK配置:
 
開發者電腦上需安裝java環境,安裝JDK1.7 + 版本 (將JAVA_HOME/bin 配置環境變量path ),我們使用的是JDK8
相關版本。
 
配置 MAVEN_HOME ,變量值就是你的maven安裝 的路徑(bin目錄之前一級目錄)
 

 

上面配置了我們的Maven軟件,注意這個目錄就是之前你解壓maven的壓縮文件包在的的目錄,最好不要有中文和
空格。
 
再次檢查JDK的安裝目錄,如下圖:
 
 

jdk環境變量配置:

環境變量
        MAVEN_HOME: maven安裝目錄
        path: %MAVEN_HOME%\bin

Maven軟件版本測試:

通過 mvn -v命令檢查 maven是否安裝成功,看到maven的版本爲3.5.2java版本爲1.8即爲安裝成功。 找開cmd
令,輸入mvn –v命令,如下圖:
 
 
我們發現maven的版本,及jdk的版本符合要求,這樣我們的maven軟件安裝就成功了。

 

三.Maven倉庫

(1)Maven倉庫分類:

Maven倉庫分爲本地倉庫和遠程倉庫二大類。而遠程倉庫又可分成中央倉庫,私服,第三方倉庫。
 

 

1. 本地倉庫    
        項目通過jar座標,先從本地倉庫找對應jar包,如果找不到會從遠程倉庫(互聯網)去下載 jar 包,保存在本地倉庫(在程序員的電腦    上),第二次不需要從遠程倉庫去下載。
        
2. 遠程倉庫
   1 中央倉庫
        由專業團隊(maven團隊)統一維護。
        中央倉庫的地址:http://repo1.maven.org/maven2/

         在maven軟件中內置一個遠程倉庫地址http://repo1.maven.org/maven2 ,它是中央倉庫,服務於整個互聯網,它
       是由Maven團隊自己維護,裏面存儲了非常全的jar包,它包含了世界上大部分流行的開源項目構件。
 

   2 私服
        架設在公司局域網內,提供給內部的人員使用。

       私服是一種特殊的遠程倉庫,其內容是來自於其他的遠程倉庫,一般架設在局域網內,提供給一個組織的人員使用。
      當Maven需要下載依賴時,從私服請求,如果私服上不存在該依賴,則從其他遠程倉庫下載,同時緩存在私服上,提
     供給其他人使用。如果項目中的一些內部模塊,無法發佈到外部遠程倉庫中,也可發佈在私服上,提供給項目中的其
     他人員使用。
 

   3第三方倉庫
         Maven 倉庫默認中央倉庫在國外且只有一個, 國內使用難免很慢,我們可以更換爲第三方公共庫,例如:阿里雲鏡

依賴尋找流程:

1.在本地倉庫中,根據Maven座標系尋找指定依賴,如果存在,直接返回。
2.如果Maven倉庫中不存在,或者需要檢查依賴的版本時,maven則會去遠程倉庫中尋找,下載到本地倉庫中再使
用。
 

本地倉庫:

 

(2)Maven本地倉庫的配置:
 

1. 將Maven下載好的倉庫 解壓到非中文及特殊符號目錄下

2. 修改 maven的安裝目錄/conf/settings.xml 文件的標籤
        <localRepository>本地倉庫地址</localRepository>

指定自定義本地倉庫

(3)Maven倉庫國內鏡像的配置

修改 maven 根目錄下的 conf 文件夾中的 setting.xml 文件,在 mirrors 節點上,添加內容如下:

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

(4)全局setting與用戶setting

maven倉庫地址、私服等配置信息需要在setting.xml文件中配置,分爲全局配置和用戶配置。 在maven安裝目錄下
的有 conf/setting.xml文件,此setting.xml文件用於maven的所有project項目,它作爲maven的全局配置。
如需要個性配置則需要在用戶配置中設置,用戶配置的setting.xml文件默認的位置在:${user.dir} /.m2/settings.xml目錄
,${user.dir} windows 中的用戶目錄。 maven會先找用戶配置,如果找到則以用戶配置文件爲準,否則使用全
局配置文件。

四:Maven座標和依賴:

Maven的一個核心的作用就是管理項目的依賴,引入我們所需的各種jar包等。爲了能自動化的解析任何一個Java
件,Maven必須將這些Jar包或者其他資源進行唯一標識,這是管理項目的依賴的基礎,也就是我們要說的座標。包
括我們自己開發的項目,也是要通過座標進行唯一標識的,這樣才能才其它項目中進行依賴引用。
 
座標的定義元素如下:
 
groupId:定義當前Maven項目名稱
artifactId:定義項目模塊
version:定義當前項目的當前版本
 
例如:創建一個Mavenweb項目,在pom.xml文件中生成座標
 
 
<!--當前項目座標--> 
<groupId>com.wsl</groupId>
 <artifactId>maven_helloword</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>war</packaging>
例如:要引入junit的測試jar,只需要在pom.xml配置文件中配置引入junit的座標依賴即可:
 
<!-- 依賴關係 -->
 <dependencies> 
    <!-- 此項目運行使用junit,所以此項目依賴junit --> 
   <dependency> 
     <!-- junit的項目名稱 --> 
     <groupId>junit</groupId> 
     <!-- junit的模塊名稱 --> 
     <artifactId>junit</artifactId>
     <!-- junit版本 --> 
     <version>4.12</version> 
     <!-- 依賴範圍:單元測試時使用junit --> 
     <scope>test</scope> 
   </dependency> 
</dependencies>

五.Maven工程結構:

傳統java工程遇到的問題:

Maven項目結構:

* java項目
	java工程名(項目名)
		|-- src目錄
			|-- main目錄(主幹代碼)
				|-- java目錄(java代碼)
				|-- resources目錄(配置文件)
			|-- test目錄(測試代碼)
				|-- java目錄(java代碼)
				|-- resources目錄(配置文件)
		|-- pom.xml(maven工程核心配置文件)
		|-- target目錄(存放編譯後的class文件.....)

* web項目【重點】
	web工程名(項目名)
		|-- src目錄
			|-- main目錄(主幹代碼)
				|-- java目錄(java代碼)
				|-- resources目錄(配置文件)
				|-- webapp目錄(頁面資源)
					|-- WEB-INF
						|-- web.xml(web工程核心配置文件)
					|-- index.jsp
					|-- css、js、img..
			|-- test目錄(測試代碼)
				|-- java目錄(java代碼)
				|-- resources目錄(配置文件)
		|-- pom.xml(maven工程核心配置文件)
		|-- target目錄(存放編譯後的class文件.....)

 

六.Maven生命週期和插件:

(1)Maven常用命令和插件:

我們可以在 cmd 中通過一系列的 maven 命令,來對我們的工程進行編譯、測試、打包、安裝、部署。

1)clean

maven工程的清理命令,執行clean會刪除target目錄及內容。

2)compile

maven工程的編譯命令,作用是將 src/main/java 下的文件編譯爲class文件輸出到target目錄下。

3)test

maven工程的測試命令,作用是執行 src/test/java 下單元測試類,並編譯爲class文件。

4)package

maven工程的打包命令,對於java工程執行package打成jar包,對於web工程打成war包。

注意:爲什麼maven_hello是war包而不是jar包呢?

5)install

maven工程的安裝命令,執行install將mave工程打成jar包或war包,併發布到本地倉庫。

6)deploy

maven工程部署命令,將jar或war包部署(上傳)到私服中。

 

(2)生命週期:

maven 對項目構建過程分爲“三套相互獨立的”生命週期,這三套生命週期分別是:

1. Clean Lifecycle(清理生命週期)
		在進行真正的構建之前進行一些清理工作。
		命令:clean
		
2. Default Lifecycle(默認生命週期)
		構建的核心部分,編譯,測試,打包,部署等等。
		命令: compile  test  package  install  deploy
		
3. Site Lifecycle(站點生命週期)
		生成項目報告,站點,發佈站點。 
		命令: site
		
* 在同一個生命週期中的命令,執行後面的命令,前面的命令自動執行

clean生命週期 :
 
clean生命週期的目的是清理項目,它包含三個階段:
  • pre-clean:執行一些需要在clean之前完成的工作
  • clean:移除所有上一次構建生成的文件
  • post-clean:執行一些需要在clean之後立刻完成的工作
default生命週期:
 
default生命週期定義了真正構件時所需要執行的所有步驟,它是生命週期中最核心的部分,它包含的階段如下:
 
 

site生命週期:

site生命週期的目的是建立和發佈項目站點,Maven能夠基於POM所包含的信息,自動生成一個友好的站點,方便團
隊交流和發佈項目信息。該生命週期包含如下階段:
 
  • pre-site:執行一些需要在生成站點文檔之前完成的工作
  • site:生成項目的站點文檔
  • post-site: 執行一些需要在生成站點文檔之後完成的工作,並且爲部署做準備
  • site-deploy:將生成的站點文檔部署到特定的服務器上

 

(3)Maven概念模型:

Maven 包含了一個項目對象模型 (POM:Project Object Model),一組標準集合,一個項目生命週期(Project
Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命週期階段(phase)中插
件(plugin)目標(goal)的邏輯。
 
項目對象模型 (Project Object Model)
 
一個maven工程都有一個pom.xml文件,通過pom.xml文件定義項目的座標、項目依賴、項目信息、插件目標等。
 
依賴管理系統(Dependency Management System)
 
通過maven的依賴管理對項目所依賴的jar 包進行統一管理。比如:項目依賴junit4.12,通過在pom.xml中定義
junit4.12的依賴即使用junit4.12,如下所示是junit4.12的依賴定義:
 
<!-- 依賴關係 --> 
<dependencies> 
    <!-- 此項目運行使用junit,所以此項目依賴junit --> 
    <dependency> 
        <!-- junit的項目名稱 -->
         <groupId>junit</groupId> 
        <!-- junit的模塊名稱 -->
         <artifactId>junit</artifactId>
         <!-- junit版本 --> 
        <version>4.12</version>
         <!-- 依賴範圍:單元測試時使用junit -->
         <scope>test</scope> 
    </dependency> 
</dependencies>
一個項目生命週期(Project Lifecycle)
 
使用maven完成項目的構建,項目構建包括:清理、編譯、測試、部署等過程,maven將這些過程規範爲一個生命
週期,如下所示是生命週期的各各階段
 
 
一組標準集合
 
maven將整個項目管理過程定義一組標準,比如:通過maven構建工程有標準的目錄結構,有標準的生命週期階
段、依賴管理有標準的座標定義等。
 
插件(plugin)目標(goal)
 
maven 管理項目生命週期過程都是基於插件完成的。
 
 

七.IDEA創建Maven工程

(1)IDEA配置本地Maven環境(全局配置)

如果我們在IDEA創建maven工程默認從互聯網在下載一個骨架(但是若電腦沒有聯網,就會卡頓一段時間,再使用本地骨架),我們可以直接指定IDEA查找本地骨架,效率提升

-DarchetypeCatalog=internal -Dfile.encoding=GB2312

初始化工作空間:

設置jdk環境:

統一編碼環境

點擊 File 菜單項,選中 Settings
 
選中 Editor File Encodings 選項卡,設置編碼爲UTF-8

方法之間加入一條分割線:

 

(2)創建一個全新的工作空間(基於Maven結構)

 

(1)IDEA創建工程

java工程:

手動創建test測試配置文件目錄

指定maven環境的jdk版本和字符集

<build>
    <plugins>
        <!-- 設置編譯版本爲1.8 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

maven工程命令操作:

如何導入依賴:

maven的搜索倉庫:https://mvnrepository.com/

https://mvnrepository.com/

web工程

idea創建web工程,我們需要安裝一個插件:

安裝完成後,重啓idea工具

注意:

有些時候創建maven之後,文件夾不變顏色,需要手動刷新:

 

發佈web工程:

idea使用外置tomcat運行

idea使用maven內置tomcat插件

<build>
        <plugins>
            <!-- 設置編譯版本爲1.8 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                    <uriEncoding>utf-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

雙擊啓動

命令啓動

 

(3)依賴管理:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章