Maven简述以及配置使用
目前的技術存在的問題(引入Maven的重要性)
一個項目就是一個工程;
-
如果項目非常龐大,就不再適合使用package來劃分模塊;最好是每一個模塊對應一個工程,利于分工協作;
-
借助于Maven可以將一個項目拆分成多個工程;
項目中的jar包需要導入到WEB-INNF/lib目錄下;
-
帶來的問題:同樣的jar重復的出現在不同的項目中,一方面浪費存儲空間,工程也會臃腫;
-
借助Maven,可以將jar包僅僅保存在倉庫中,有需要的工程引入這個文件接口,并不需要真的把jar包引入過來;
jar包需要別人替我們準備好,或者到官網下載;
-
不同技術的官網提供jar包的方式不同;
-
語言問題;
-
有些技術的官網直接通過Maven或者 來提供jar包;
-
非正規方式下載的jar包,其中的內容很可能不規范;
-
借助于Maven可以以一種規范的方式下載jar包,因為所有知名的框架或者第三方的jar包已經按照統一的規范放在了Maven的倉庫中,因此jar包也是可靠的;
一個jar包依賴的其他jar包需要自己手動導入 ;
-
如果所有jar包之間的依賴關系都需要程序員了解,那么會極大的增加學習成本;
-
Maven會自動的將被依賴的jar包導入進來;
“統一的規范”非常重要;
?
Maven的概念
Maven是一款服務于Java平臺的自動化構建工具;
-
Make→Ant→Maven→Gradle
構建
-
概念:以java源文件、框架的配置文件、JSP、HTML、CSS、JS、圖片等資源為原材料的,去生產一個可以運行的項目的過程;
-
生產
-
部署
-
搭建
-
-
編譯:Java源文件[User.java]→編譯→Class字節碼文件[User.class]→交給JVM執行 ;
-
部署:一個BS項目最終運行的并不是動態Web工程本身,而是這個動態Web工程編譯的結果;
運行時環境:是一組jar包的引用,不是jar包本身復制到工程中;
構建中的各個環節
清理:將以前編譯得到的舊的字節碼文件刪除,為下一次編譯做準備
編譯:將Java源程序編譯成Class字節碼文件
測試:自動測試,自動調用junit程序
報告:測試程序執行的結果
打包:動態Web工程打war包,Java工程打jar包
安裝:Maven特定的概念,是將打包得到的文件復制到倉庫中的指定位置
部署:將動態Web工程生成的war包復制到Servlet容器的指定目錄下,使其可以運行
自動化構建
安裝Maven核心程序
檢查JAVA_HOME環境變量
解壓Maven核心程序壓縮包,放在一個非中文、無空格的路徑下;
配置Maven的環境變量
-
推薦配置Maven_HOME或M2_HOME(推薦)
-
-
配置PATH
-
驗證:運行mvn-v命令查看Maven的版本
-
?
Maven的核心概念
約定的目錄結構
POM
坐標
依賴
倉庫
生命周期/插件/目標
繼承
聚合
第一個Maven工程
創建約定的目錄結構
-
根目錄:工程名
-
sec:源碼
-
pom.xml:Maven工程的核心配置文件
-
main目錄:存放主程序
-
java目錄:java源文件
-
resources目錄:存放框架配置文件或者其他工具的配置文件
-
-
test目錄:存放測試程序
-
java目錄:java源文件
-
resources目錄:存放框架配置文件或者其他工具的配置文件
-
為什么用規定的目錄結構?
-
Maven要負責項目的自動化構建,以編譯為例,Maven要想自動編譯,它必須知道Java源文件保存在哪里;
-
自定義的內容使得框架或工具知道,必須使用規定的目錄表結構或者以配置的方式明確告訴框架(工具);
-
約定>配置>編碼;
常用Maven命令
注意:執行與構建過程相關的Maven命令,必須進入pom.xml所在的目錄.
與構建過程相關:編譯、測試、打包、......
常用命令
-
mvn clean:清理
-
mvn compile:編譯主程序
-
mvn test-compile:編譯測試程序
-
mvn test:執行測試
-
mvn package:打包
-
mvn instal:安裝
-
mvn site:生成站點
聯網問題
Maven的核心程序中僅僅定義了抽象的生命周期,但是具體的工作必須由特定的插件來完成。而插件本身并不包含在Maven的核心流量中;
當我們執行的Maven命令需要用到某些插件時,會首先在本地倉庫查找;
本地倉庫的默認位置:[系統中當前的用戶的家目錄]\:m2\respsitory;
Maven核心程序在本地倉庫找不到需要的插件,那么會自動連接外網,到中央倉庫下載;
此時無法連接外網,則構建失敗;
修改默認本地倉庫的位置可以讓Maven在事先準備好的倉庫中查找插件;
-
找到Maven解壓目錄下的\conf\settings.xml
-
在文件中找到<localRepository>標簽,修改為準備好的路徑即可;
POM
含義:Project Object Model(項目對象模型)
-
DOM:Document Object Model 文檔對象模型
pom.xml對于Maven工程是最核心配置文件,與構建相關的一切設置都在這個文件中進行配置,重要程度相當于web工程中的 web.xml
坐標
數學中的坐標:
-
在平面中使用X、Y兩個量可以定位平面中的任何一個點;
-
在空間中使用X、Y兩個量可以定位空間中的任何一個點;
Maven中的坐標
-
使用三個值來定義倉庫中的一個Maven工程:
-
groupid:公司或者組織域名倒序+項目名
-
| <groupid>com.shang.maven</groupid> |
-
-
-
artifactid:模塊名
-
-
| <artifactid>hello</artifactid> |
-
-
-
version:版本
-
-
| <version>1.0.0</version> |
?
-
-
坐標與倉庫中路徑的對應關系
-
路徑為:groupid/artifactid/version/artifactid-version.jar,其中groupid中的.要變成/
?
倉庫
倉庫的分類
-
本地倉庫:當前電腦上部署的倉庫目錄,為當前電腦所有的指定Maven工程服務;
-
遠程倉庫
-
局域網(私服):搭建在局域網環境中,為局域網范圍內的所有Maven工程服務;
-
-
-
中央倉庫:為架設在Internet上,為世界上所有的Maven項目工程服務;
-
中央倉庫鏡像:為了分擔中央倉庫的流量,提升用戶訪問的速度,也可以減輕負擔;
-
倉庫中保存的內容:Maven工程
-
-
Maven自身所需要的插件
-
第三方框架或工具的jar包
-
自己開發的Maven工程
-
依賴
Maven解析依賴信息時會在本地倉庫尋找被依賴的jar包
對于自己開發的Maven工程,使用install命令安裝后就可以進入倉庫。
mvn install
依賴的范圍<scope>
-
compile
-
對主程序是否有效:√
-
對測試程序是否有效:√
-
是否參與打包:√
-
-
test
-
對主程序是否有效:×
-
對測試程序是否有效:√
-
是否參與打包:×
-
典型的例子:
-
-
-
provided
-
-
-
-
對主程序有效
-
對測試程序有效
-
不參與打包,因此也不參與部署
-
典型的例子:Servlet-api.jar
-
-
生命周期
各個構建環節執行的順序:不能打亂順序,必須按照既定的正確順序來執行;
Maven的核心程序中定義了抽象的生命周期,生命周期中各個階段的任務是由插件來完成的;
Maven核心程序為了更好的實現自動化構建,按照這一特點執行生命周期中的各個階段:不管執行生命周期的哪一個階段,都在此生命周期的第一個階段開始;
插件和目標
-
生命周期的各個階段僅僅定義了要執行的任務是什么;
-
各個階段和插件的目標是對應的;
-
相似的目標由特定的插件來完成;
-
目標可以看做是調用插件功能的命令
在eclipse中使用Maven
Maven插件:Eclipse內置
Maven插件的設置
-
installations:指定Maven核心程序的位置。不建議使用插件自帶的Maven程序而應該使用自己解壓的程序;
-
user-settings:指定conf/settings.xml的位置,從而獲取本地倉庫的位置;
基本操作
-
創建Maven版的Java工程:勾選圖中項目
?
?
?
?
總結
以上是生活随笔為你收集整理的Maven简述以及配置使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu安装与配置(简要)
- 下一篇: 进程的控制——获取系统进程信息