1. 程式人生 > 其它 >docker 應用篇————docker 網路[十七]

docker 應用篇————docker 網路[十七]

maven學習筆記

一.maven簡介:

maven是一個專案管理工具

傳統開發過程中的問題:

傳統開發專案的問題,沒有使用maven【meivn】管理的專案
  1)很多模組,模組之間有關係, 手工管理關係,比較繁瑣。
  2)需要很多第三方功能, 需要很多jar檔案,需要手工從網路中獲取各個jar
  3)需要管理jar的版本, 你需要的是mysql.5.1.5.jar 拿你不能給給一個mysql.4.0.jar
  4)管理jar檔案之間的依賴, 你的專案要使用a.jar 需要使用b.jar裡面的類。
     必須首先獲取到b.jar才可以, 然後才能使用a.jar. 

     a.jar需要b.jar這個關係叫做依賴, 或者你的專案中要使用mysql的驅動, 也可以叫做專案依賴mysql驅動。
     a.class使用b.class, a依賴b類

maven可以做什麼:

需要改進專案的開發和管理,需要maven
    1)maven可以管理jar檔案
    2)自動下載jar和他的文件,原始碼
    3)管理jar直接的依賴, a.jar需要b.jar , maven會自動下載b.jar
    4)管理你需要的jar版本
    5)幫你編譯程式,把java編譯為class
    6)幫你測試你的程式碼是否正確。
    7)幫你打包檔案,形成jar檔案,或者war檔案
    8)幫你部署專案

構建:

 構建是面向過程的,就是一些步驟,完成專案程式碼的編譯,測試,執行,打包,部署等等。
   maven支援的構建包括有:
    1.清理, 把之前專案編譯的東西刪除掉,我新的編譯程式碼做準備。
    2.編譯, 把程式原始碼編譯為執行程式碼, java-class檔案
             批量的,maven可以同時把成千上百的檔案編譯為class。
	     javac 不一樣,javac一次編譯一個檔案。
    3.測試, maven可以執行測試程式程式碼,驗證你的功能是否正確。
             批量的,maven同時執行多個測試程式碼,同時測試很多功能。
    4.報告, 生成測試結果的檔案, 測試通過沒有。
    5.打包, 把你的專案中所有的class檔案,配置檔案等所有資源放到一個壓縮檔案中。
              這個壓縮檔案就是專案的結果檔案, 通常java程式,壓縮檔案是jar副檔名的。
	      對於web應用,壓縮副檔名是.war
    6.安裝, 把5中生成的檔案jar,war安裝到本機倉庫
    7.部署, 把程式安裝好可以執行。

maven的核心概念:

①POM : 一個檔案 名稱是pom.xml ,  pom翻譯過來叫做專案物件模型。 
         maven把一個專案當做一個模型使用。控制maven構建專案的過程,管理jar依賴。

②約定的目錄結構 : maven專案的目錄和檔案的位置都是規定的。

③座標 : 是一個唯一的字串,用來表示資源的。

④依賴管理 : 管理你的專案可以使用jar檔案

⑤倉庫管理(瞭解) :你的資源存放的位置

⑥生命週期 (瞭解) : maven工具構建專案的過程,就是生命週期。
⑦外掛和目標(瞭解):執行maven構建的時候用的工具是外掛
⑧繼承
⑨聚合

maven工具的安裝與下載:

1)需要從maven的官網下載maven的安裝包 apache-maven-3.3.9-bin.zip
  2)解壓安裝包,解壓到一個目錄,非中文目錄。
      子目錄 bin :執行程式,主要是mvn.cmd
		       conf :maven工具本身的配置檔案 settings.xml
  3)配置環境變數
     在系統的環境變數中,指定一個M2_HOME的名稱, 指定它的值是maven工具安裝目錄,bin之前的目錄

    M2_HOME=D:\work\maven_work\apache-maven-3.3.9

	 再把M2_HOME加入到path之中,在所有路徑之前加入 %M2_HOME%\bin;

  4)驗證,新的命令列中,執行mvn -v
   
	注意:需要配置JAVA_HOME ,指定jdk路徑

  
	C:\Users\Administrator>mvn -v
	 出現如下內容,maven安裝,配置正確。
	Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:4
	Maven home: D:\work\maven_work\apache-maven-3.3.9
	Java version: 1.8.0_40, vendor: Oracle Corporation
	Java home: C:\java\JDK8-64\jre
	Default locale: zh_CN, platform encoding: GBK
	OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

二.maven的核心概念:

約定的目錄結構:

每一個maven專案在磁碟中都是一個資料夾(專案-Hello)
	Hello/
	  ---/src
	  ------/main           #放你主程式java程式碼和配置檔案
	  ----------/java       #你的程式包和包中的java檔案
	  ----------/resources  #你的java程式中要使用的配置檔案

	  ------/test  #放測試程式程式碼和檔案的(可以沒有)
	  ----------/java       #測試程式包和包中的java檔案
	  ----------/resources  #測試java程式中要使用的配置檔案

	  ---/pom.xml  #maven的核心檔案(maven專案必須有)

首次配置maven下載:

 預設倉庫(本機倉庫):
       C:\Users\(登入作業系統的使用者名稱)Administrator\.m2\repository

	Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-parameter-documenter-2.0.9.pom

   https://repo.maven.apache.org :中央倉庫的地址

	執行mvn compile, 結果是在專案的根目錄下生成target目錄(結果目錄),
	maven編譯的java程式,最後的class檔案都放在target目錄中

設定本機存放資源的目錄位置(設定本機倉庫):

  1. 修改maven的配置檔案, maven安裝目錄/conf/settings.xml
           先備份 settings.xml

  2. 修改 <localRepository>  指定你的目錄(不要使用中文目錄)

 D:\work\maven_work\maven_repository(注意:在setting。xml檔案中需要將斜槓改為"/")

倉庫概念:

 1)倉庫是什麼: 倉庫是存放東西的, 存放maven使用的jar 和 我們專案使用的jar
     > maven使用的外掛(各種jar)
	  > 我專案使用的jar(第三方的工具)

  2)倉庫的分類
     >本地倉庫, 就是你的個人計算機上的資料夾,存放各種jar
	  >遠端倉庫, 在網際網路上的,使用網路才能使用的倉庫
	      ①:中央倉庫,最權威的, 所有的開發人員都共享使用的一個集中的倉庫,
			      https://repo.maven.apache.org :中央倉庫的地址
			②:中央倉庫的映象:就是中央倉庫的備份, 在各大洲,重要的城市都是映象。

			③:私服,在公司內部,在區域網中使用的, 不是對外使用的。

  3)倉庫的使用,maven倉庫的使用不需要人為參與。 
       
		開發人員需要使用mysql驅動--->maven首先查本地倉庫--->私服--->映象--->中央倉庫

pom檔案分析:

groupId + artifactId + version = 座標(唯一標識)

https://mvnrepository.com/ 搜尋使用的中央倉庫, 使用groupId 或者 artifactId作為搜尋條件

示例:

<groupId>com.bjpowernode</groupId>
  <artifactId>ch07-ssm</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--servlet依賴-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>  
  </dependencies>
<build>
    <resources>
      <resource>
        <directory>src/main/java</directory><!--所在的目錄-->
        <includes><!--包括目錄下的.properties,.xml 檔案都會掃描到-->
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

maven的生命週期:

maven生命週期, maven的命令,maven的外掛
    maven的生命週期:就是maven構建專案的過程,清理,編譯,測試,報告,打包,安裝,部署
	 maven的命令:maven獨立使用,通過命令,完成maven的生命週期的執行。	              maven可以使用命令,完成專案的清理,編譯,測試等等
 maven的外掛: maven命令執行時,真正完成功能的是外掛,外掛就是一些jar檔案, 一些類。

單元測試:

1)單元測試(測試方法):用的是junit, junit是一個專門測試的框架(工具)。
	   junit測試的內容: 測試的是類中的方法, 每一個方法都是獨立測試的。
		                   方法是測試的基本單位(單元)。

		
      maven藉助單元測試,批量的測試你類中的大量方法是否符合預期的。


  2)使用步驟
     1.加入依賴,在pom.xml加入單元測試依賴
	  	 <!-- 單元測試 -->
		 <dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>

     2.在maven專案中的src/test/java目錄下,建立測試程式。
	    推薦的建立類和方法的提示:
		 1.測試類的名稱 是Test + 你要測試的類名
		 2.測試的方法名稱 是:Test + 方法名稱

		 例如你要測試HelloMaven ,
		 建立測試類 TestHelloMaven
       @Test
		 public void testAdd(){
          測試HelloMaven的add方法是否正確
		 }


		 其中testAdd叫做測試方法,它的定義規則
		 1.方法是public的,必須的
		 2.方法沒有返回值, 必須的
		 3.方法名稱是自定義的,推薦是Test + 方法名稱
		 4.在方法的上面加入 @Test
3)mvn compile 
	   編譯main/java/目錄下的java 為class檔案, 同時把class拷貝到 target/classes目錄下面
		把main/resources目錄下的所有檔案 都拷貝到target/classes目錄下

打包成壓縮檔案只會打包src/java中的檔案,不會打包test資料夾裡的

三.maven在IDEA中的應用:

idea中內建了maven ,一般不使用內建的, 因為用內建修改maven的設定不方便。
使用自己安裝的maven, 需要覆蓋idea中的預設的設定。讓idea指定maven安裝位置等資訊

兩個設定入口:

如何配置使用自己的maven

然後再點選maven下的runner設定:archertypeCatalog=internal

原因:maven專案建立時,會聯網下載模版檔案,比較大, 使用 -DarchetypeCatalog=internal,不用下載, 建立maven專案速度快。

i

IDEA建立javase專案:

下一步之後填寫座標資訊:

注意:如果沒有resource資料夾需要自己建立,然後右鍵 選擇makeDirectoryAs -Resource root

建立web專案:

具體配置見springMvc

將現存專案匯入到IDEA:

小tips:對於匯入的依賴maven無法識別,可以右鍵選擇pom.xml檔案選擇maven再選擇reImport,或者點選右側maven小視窗的重新整理

四.依賴範圍:

依賴範圍, 使用scope表示的。
   scope的值有 compile, test, provided ,預設是compile
	scope:表示依賴使用的範圍,也就是在maven構建專案的那些階段中起作用。
 maven構建專案  編譯, 測試 ,打包, 安裝 ,部署 過程(階段)
 
 你在寫專案的中的用到的所有依賴(jar ) ,必須在本地倉庫中有。
	沒有必須通過maven下載, 包括provided的都必須下載。

你在servlet需要繼承HttpServlet( provided) , 你使用的HttpServlet是maven倉庫中的。

當你的寫好的程式, 放到 tomat伺服器中執行時, 此時你的程式中不包含servlet的jar
因為tomcat提供了 servlet的.jar

五.maven常用操作:

 maven常用操作
  1.maven的屬性設定
     <properties> 設定maven的常用屬性
  2.maven的全域性變數
     自定義的屬性,1.在<properties> 通過自定義標籤宣告變數(標籤名就是變數名)
	                 2.在pom.xml檔案中的其它位置,使用 ${標籤名} 使用變數的值

	自定義全域性變數一般是定義 依賴的版本號, 當你的專案中要使用多個相同的版本號,
	先使用全域性變數定義, 在使用${變數名}


  3.資源外掛

  <build>
	<resources>
	<resource>
	<directory>src/main/java</directory><!--所在的目錄-->
	<includes><!--包括目錄下的.properties,.xml 檔案都會掃描到-->
	<include>**/*.properties</include>
	<include>**/*.xml</include>
	</includes>
	<!—filtering 選項 false 不啟用過濾器, *.property 已經起到過濾的作用了 -->
	<filtering>false</filtering>
	</resource>
	</resources>
  </build>

  作用: mybatis課程中會用到這個作用

  1. 預設沒有使用resources的時候, maven執行編譯程式碼時, 會把src/main/resource目錄中的檔案拷貝到target/classes目錄中。