maven-1入門

微服務:架構風格(服務微化)
一個應用應該是一組小型服務;可以通過HTTP的方式進行互通;
單體應用: ALL IN ONE
微服務:每一個功能元素最終都是一個可獨立替換和獨立升級的軟件單元;
環境約束
jdk1.8
-maven3.x
-lntelliJIDEA2017
-SpringBoot 1.5.9.RELEASE

2.目前的技術在開發中存在的問題
①一個項目就是一個工程
如果項目非常龐大,就不適合繼續使用package來劃分模塊。最好是每一個模塊對應一個工程,利於分工協作。藉助於Maven就可以將一個項目拆分成多個工程。
②項目中需要的jar包必須手動「複製」、「粘貼」 到WEB-INF/lib目錄下帶來的問題是:同樣的jar包文件重複出現在不同的項目工程中, 一方 面浪費存儲空間,另外也讓工程比較臃腫。
③jar包需要別人替我們準備好,或到官網下載
不同技術的官網提供jar包下載的形式是五花八門的。
有些技術的官網就是通過Maven或SVN等專門的工具來提供下載的。
如果是以不規範的方式下載的jar包,那麼其中的內容很可能也是不規範的。
藉助於Maven可以以一種規範的方式下載jar包。因爲所有知名框架或第三方工具的jar包以及按照統一的規範存放在了Maven的中央倉庫中。以規範的方式下載的jar包.內容也是可靠的。
Tips:「統一的規範」不僅是對IT開發領域非常重要,對於整個人類社會都是非常重要的。
④一個jar包依賴的其他jar包需要自己手動加入到項目中
FileUpload組件→I0組件。 commons-fileupload-1.3.jar依賴於commons-io-2.0.1.jar.
如果所有jar包之間的依賴關係都需要程序員自己非常清楚的瞭解,那麼就會極大的增加學習成本。
Maven會自動將被依賴的jar包導入進來。

3.Maven是什麼[What]
①Maven是一款服務於Java平臺的自動化構建工具。
②構建
[1]概念:以"Java源文件"、」框架配置文件」 、"JSP" 、「HTML"、 「圖片」 等資源爲「原材料」,去「生產」一個可以運行的項目的過程。
■編譯
■部署
■搭建
[2]編譯: Java源文件[User.java]→+編譯→Class字節碼文件[User.class]→+交給JVM去執行
[3]部署:一個BS項目最終運行的並不是動態Web工程本身,而是這個動態Web工程「編譯的結果」
生的雞→處理→+熟的雞
動態Web工程→編譯、部署→ +編譯結果
Tips :運行時環境

其實是一組jar包的引用,並沒有把jar包本身複製到工程中所以並不是目錄。

③構建過程中的各個環節
[1]清理:將以前編譯得到的舊的class字節碼文件刪除,爲下一次編譯做準備
[2]編譯:將Java源程序編程成class字節碼文件
[3]測試:自動測試,自動調用junit程序
[4]報告:測試程序執行的結果
[5]打包:動態Web工程打war包. Java工程打jar包
[6]安裝: Maven特定的概念一將打 J包得到的文件複製到"倉庫」中的指定位置
[7]部署:將動態Web工程生成的war包複製到Servlet容器的指定目錄下,使其可以運行

④自動化構建
4.安裝Maven核心程序
①檢查JAVA HOME環境變量
C:\Windows\System32> echo %JAVA_ HOME%
D:\DeviInstallNjdk1.7.0_ 07
②解壓Maven核心程序的壓縮包,放在一個非中文無空格路徑下
D:\DevInstallapache-maven-3.2.2
③配置Maven相關的環境變量

④驗證:運行mvn -v命令查看

5.Maven的核心概念
①約定的目錄結構
②POM
③座標
④依賴.
⑤倉庫.
⑥生命週期/插件/目標
⑦繼承
⑧聚合
6.第一個Maven工程
①創建約定的目錄結構
[1]根目錄:工程名
[2]src目錄:源碼
[3]pom.xml文件: Maven工程的核心配置文件
[4]main目錄:存放主程序
[5]test目錄:存放測試程序
[6]java目錄:存放Java源文件
[7]resources目錄:存放框架或其他工具的配置文件

②爲什麼要遵守約定的目錄結構呢?
Maven要負責我們這個項目的自動化構建.以編譯爲例. Maven要想自動進行編譯.那麼它必須知道
Java源文件保存在哪裏。
如果我們自己自定義的東西想要讓框架或工具知道.有兩種辦法
■以配置的方式明確告訴框架

遵守框架內部已經存在的約定
約定>配置>編碼
7.常用Maven命令
①注意:執行與構建過程相關的Maven命令,必須進入pom.xml所在的目錄
與構建過程相關:編譯、測試、打包、....
②常用命令
[1]mvn clean :清理
[2]mvn compile :編譯主程序
[3]mvn test-compile :編譯測試程序
[4]mvn test :執行測試
[5]mvn package :打包
[6]mvn install :安裝。
[7]mvn site :生成站點
8.關於聯網問題
①Maven的核心程序中僅僅定義了抽象的生命週期.但是具體的工作必須由特定的插件來完成。而插件本身
並不包含在Maven的核心程序中。
②當我們執行的Maven命令需要用到某些插件時, Maven核心程序會首先到本地倉庫中查找。
③本地倉庫的默認位置: [系統中當前用戶的家目錄]\.m2Vrepository

④Maven核心程序如果在本地倉庫中找不到需要的插件,那麼它會自動連接外網,到中央倉庫下載。
⑤如果此時無法連接外網,則構建失敗。

⑥修改默認本地倉庫的位置可以讓Maven核心程序到我們事先準備好的目錄下查找插件
[1]找到Maven解壓目錄\conflsettings.xml
[2]在settings.xml文件中找到localRepository標籤
[3]將<localRepository> /path/to/local/repo< /localRepository>從註釋中取出
[4]將標籤體內容修改爲已經準備好的Maven倉庫目錄

9.POM
①含義: Project Object Model項目對象模型
DOM Document Object Model文檔對象模型
②pom.xml對於Maven工程是核心配置文件,與構建過程相關的一切設置都在這個文件中進行配置。
重要程度相當於web.xml對於動態Web工程
10.座標
Maven的座標
使用下面三個向量在倉庫中唯一定位一個Maven工程
[1]groupid :公司或組織域名倒序+項目名
<groupid> com.atguigu.maven</groupid>
[2]artifactid :模塊名
< artifactid> Hello</artifactid>
[3]version:版本
<version> 1.0.0</version>
Maven工程的座標與倉庫中路徑的對應關係

11.倉庫
①倉庫的分類
[1]本地倉庫:當前電腦上部署的倉庫目錄,爲當前電腦上所有Maven工程服務
[2]遠程倉庫
(1)私服:搭建在局域網環境中.爲局域網範圍內的所有Maven工程服務
(2)中央倉庫:架設在Internet上,爲全世界所有Maven工程服務
(3)中央倉庫鏡像:爲了分擔中央倉庫的流量,提升用戶訪問速度
②倉庫中保存的內容: Maven工程
[1]Maven自身所需要的插件
[2]第三方框架或工具的jar包
[3]我們自己開發的Maven工程
12.依賴
①Maven解析依賴信息時會到本地倉庫中查找被依賴的jar包。
對於我們自己開發的Maven工程,使用mvn install命令安裝後就可以進入倉庫。
②依賴的範圍

[1]compile範圍依賴
■對主程序是否有效:有效
■對測試程序是否有效:有效
■是否參與打包:參與
■是否參與部署:參與
■典型例子: spring-core
[2]test範圍依賴
■對主程序是否有效:無效
■對測試程序是否有效:有效
■是否參與打包:不參與
■是否參與部署:不參與
■典型例子: junit
[3]provided範圍依賴

■對主程序是否有效:有效
■對測試程序是否有效:有效
■是否參與打包:不參與
■是否參與部署:不參與
■典型例子: servlet-apijar
 

13.生命週期
①各個構建環節執行的順序:不能打亂順序,必須按照既定的正確順序來執行。
②Maven的核心程序中定義了抽象的生命週期.生命週期中各個階段的具體任務是由插件來完成的。
③Maven核心程序爲了更好的實現自動化構建,按照這一的特點執行生命週期中的各個階段:不論現在要執
行生命週期中的哪一個階段,都是從這個生命週期最初的位置開始執行。

④插件和目標
[1]生命週期的各個階段僅僅定義了要執行的任務是什麼。
[2]各個階段和插件的目標是對應的。
[3]相似的目標由特定的插件來完成。