中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

開局一張圖,學一學項目管理神器Maven

發布時間:2020-07-09 13:02:03 來源:網絡 閱讀:161 作者:wx5d6cccb1cb158 欄目:編程語言

Maven強大的Java工程構建工具,做Java開發時少了跟Maven打交道,之前在知乎上看到有人提問:“學Java開發需不需要學習Maven?”,個人認為是必需要學的,這和 工欲善其事必先利其器是一個道理,開發軟件也要先把工具學好才能 事半功倍 啊。所以最近花了一點時間,將Maven的基礎知識整理成一張腦力:
開局一張圖,學一學項目管理神器Maven

這篇文件主要簡單介紹一些Maven中的概念,文章大致內容如下:

安裝maven
配置maven
maven的命令語法
maven的構建征集周期
其他的一些高級特性如依賴、插件、settings部分留待之后再整理成。

安裝Maven
安裝Maven的步驟非常簡單、快速,安裝之前先確認 JAVA_HOME 環境變量是否指向JDK主目錄可以使用 echo 命令輸出 JAVA_HOME 目錄:

echo $JAVA_HOME

如果輸出為空說明 JAVA_HOME 未設置或指向不正確,可以使用 export 導出 JAVA_HOME 變量:

export JAVA_HOME=/path/to/java_home/

要使 JAVA_HOME 變量開機生效,可以將 JAVA_HOME=/path/to/java_home/ 放入 .profile 或 .bash_profile 視機器環境而定。

設置好 JAVA_HOME 環境變量后,就可以安裝Maven了:

下載 apache-maven-3.6.3-bin.zip
使用 unzip 命令解壓 apache-maven-3.6.3-bin.zip 壓縮文件
添加一個 MAVEN_HOME 環境變量,指向解壓后的 apache-maven-3.6.3-bin 目錄
將 MAVEN_HOME/bin 添加 PATH 環境變量中

下載 Maven

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip

解壓 Maven

unzip apache-maven-3.6.3-bin.zip

設置 MAVEN_HOME 環境變量

cd apache-maven-3.6.3
pwd #查看當前目錄
export MAVEN_HOME=/Users/yjwfn/bin/apache-maven-3.6.3

設置 PATH 環境變量

export PATH=$PATH:$MAVEN_HOME/bin

以上配置只是當前 shell終端生效 ,要每次開機自動設置需要將以上命令放入 ~/.bash_profile 或 ~/.profile 中,本文使用 ~/.bash_profile (不同的機器名稱會不一樣,Linux一般叫 ~/.profile ):

vi ~/.bash_profile

將以下命令復制到文件中:

export MAVEN_HOME=/Users/yjwfn/bin/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

驗證安裝
使用 which mvn 命令驗證安裝是否正確,查看輸出 mvn 位置是否正確:

liuweideMacBook-Pro:bin yjwfn$ which mvn
/Users/yjwfn/bin/apache-maven-3.6.3/bin/mvn

使用 mvn -v 查看安裝的 Maven 版本是否正確(因為有些系統會自帶 Maven):

liuweideMacBook-Pro:bin yjwfn$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/yjwfn/bin/apache-maven-3.6.3
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"

運行 Maven
運行 Maven 命令的基本樣式由 options 、 goal(s) 、 phase(s) 組成:

mvn [options] [<goal(s)>] [<phase(s)>]

所有的 options 可以使用 mvn -h 查看:

liuweideMacBook-Pro:bin yjwfn$ mvn -h

usage: mvn [options] [<goal(s)>] [<phase(s)>]

Options:
 -am,--also-make                        If project list is specified, also
 ....

Maven 命令的重點是 goal(s) 、 phase(s) 這兩個概念,字面意思注是目標、階段的意思。他們的使用和另外一個概念 life cycles 有關,后面會詳細解釋。現在只需要明白一條 Maven 命令由多個 options 、 goal(s) 、 phase(s) 組成。

Maven配置
Maven 有三個可以修改配置的地方:

MAVEN_OPTS 環境變量 :向全局 Maven 提供額外的選項,如JVM配置參數 -Xms256m -Xmx512m;
settings.xml :文件位于 USER_HOME/.m2 目錄中,向多個 Maven 項目提供統一的配置
.mvn 目錄:該目錄位工程目錄根目錄中,是個隱藏的文件extensions.xmlmaven.configjvm.config

MAVEN_OPTS 使用
MAVEN_OPTS 是一個環境變量,默認是空的。為測試將 MAVEN_OPTS 設置成 -h :

export MAVEN_OPTS=-h #加個-h選項

然后執行 mvn 不帶任務參數就打印出usage:

用法: java [-options] class [args...]
           (執行類)
   或  java [-options] -jar jarfile [args...]
           (執行 jar 文件)

注意:仔細一看這個 usage 其實是Java命令輸出的 java -h :

iuweideMacBook-Pro:bin yjwfn$ java -h
用法: java [-options] class [args...]
           (執行類)
   或  java [-options] -jar jarfile [args...]
           (執行 jar 文件)

測試 java -h 與將 MAVEN_OPTS 設置成 -h 然后執行 mvn 打印出來的效果一致,所以 MAVEN_OPTS 大家應該知道怎么用了吧! 要往JVM傳遞參數可以通過 MAVEN_OPTS 變量設置 。

settings.xml 文件
settings.xml 可以放在兩個地址:

$MAVEN_HOME/conf/settings.xml
USER_HOME/.m2

$MAVEN_HOME 就是安裝步驟中設置的環境變量, settings.xml 的加載可以打開 --debug 選項查看:

mvn --debug
# 部分控制臺輸出
[DEBUG] Reading global settings from /Users/yjwfn/bin/apache-maven-3.6.3/conf/settings.xml
[DEBUG] Reading user settings from /Users/yjwfn/.m2/settings.xml

如控制臺輸出一樣,會在 $MAVEN_HOME 和 USER_HOME/.m2 中加載兩個 settings.xml 文件。 settings.xml 的配置項非常多,就不詳細說明了可以查看官方文檔。
開局一張圖,學一學項目管理神器Maven

mvn 目錄
mvn 目錄位于工程根目錄中,是工程級的配置一般包含三個配置文件:

extensions.xml
maven.config
jvm.config
Maven Extensions
extensions.xml 是為了使開發者更方便的使用 Extensions 功能建立的配置文件, Extensions 是一種添加庫到 Core Classloader 的方式 , Maven 主要有四類 System Classloader -> Core Classloader -> Plugin Classloaders -> Custom Classloaders 由于 CloassLoader 都是雙親委派模式,所以添加到 Core Classloader 中的庫可以在 Plugin Classloaders 和 Custom Classloaders 中使用:
開局一張圖,學一學項目管理神器Maven

extensions.xml的配置演示:
extensions.xml 這個配置文件就是聲明哪些庫需要添加到 Core Classloader 中,如下聲明將 guava 添加到 Core Classloader 中:
開局一張圖,學一學項目管理神器Maven

<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
  <extension>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
  </extension>
</extensions>

maven.config
maven.config 主要用于添加通用選項,在執行 mvn 命令時會將 maven.config 中配置的命令options添加到命令中。

新建個maven.config文件,內容如下:

-v

直接執行 mvn 不帶任何選項,由于在 maven.config 中有 -v 選項,所以打出的內容就是 mvn -v :

liuweideMacBook-Pro:.mvn yjwfn$ mvn
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/yjwfn/bin/apache-maven-3.6.3
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"
liuweideMacBook-Pro:.mvn yjwfn$

jvm.config
jvm.config 是配置JVM參數的文件,很容易理解就不多說了。

Maven 構建生命周期
構建生命周期 就Maven較核心的概念, Maven有三個內置的構建生命周期分別為: clean 、 default 、 site 。

構建階段(Build Phase)
在Maven中 一個生命周期由一系列 Build Phase 組成 ,而每個生命周期都會有很多 Build Phase 如 default 生命周期由以下 Build Phase 組成:

validate -確認項目正確并且所有必要的信息均可用
compile -編譯項目的源代碼
test-使用合適的單元測試框架測試編譯后的源代碼。這些測試不應要求將代碼打包或部署
package -獲取編譯后的代碼,并將其打包為可分發的格式,例如JAR。
verify -對集成測試的結果進行任何檢查,以確保符合質量標準
install -將軟件包安裝到本地存儲庫中,以作為本地其他項目中的依賴項

deploy -在構建環境中完成后,將最終軟件包復制到遠程存儲庫中,以便與其他開發人員和項目共享。
這些生命周期階段(加上此處未顯示的其他生命周期階段)將順序執行以完成 default 生命周期。給定上面的生命周期階段,這意味著當使用 default 生命周期時,Maven將首先驗證項目,然后嘗試編譯源代碼,針對測試運行源代碼,打包二進制文件(例如jar),針對該源運行集成測試軟件包,驗證集成測試,將經過驗證的軟件包安裝到本地存儲庫,然后將已安裝的軟件包部署到遠程存儲庫。

插件目標(Plugin Goals)
Build Phase 只是定義一些軟件構建的流程,它不會直接去構建工程,這些構建流程的實施都是由 插件 來做的,構建生命周期可以這樣理解 一個生命周期由多個構建階段組成,每個構建階段都會被多個插件目標綁定 ,用一張圖表示他們之間的關系:
開局一張圖,學一學項目管理神器Maven

圖中的 jar:jar 、 install:install 是 plugin:goal 的意思,冒號的前面部分是插件名稱,后面是目標名稱。由上圖可知當執行 mvn install 的命令時,會執行 default 生命周期中的 install 階段(同時在install之前的階段也會執行),由于 install:install 目標綁定到了 install phase ,所以 install:install 目標也會執行,這樣就通過 install 插件來完成打包功能。

總結
Maven是非常流行的構建工具,下一代構建工具 Gradle 也有一些點是借鑒了Maven。文中所提到的點只是Maven工具的一部分知識,Maven還有很多強大的功能如:依賴管理、插件管理、多工程等功能,后續再整理這些高級功能與大家分享。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蓝田县| 宁安市| 昌邑市| 北碚区| 梁山县| 肥东县| 长沙县| 晋中市| 洛宁县| 兴仁县| 客服| 灌云县| 南阳市| 米泉市| 通河县| 南川市| 萝北县| 四川省| 射洪县| 日喀则市| 石渠县| 灌南县| 益阳市| 东源县| 沂源县| 庄浪县| 双鸭山市| 扎鲁特旗| 台山市| 平潭县| 哈尔滨市| 景东| 宜春市| 乐亭县| 阿拉善盟| 拜泉县| 尼勒克县| 南郑县| 姜堰市| 筠连县| 霍城县|