Maven入门教程
Maven簡介
Maven作為一個構建工具,不僅能幫我們自動化構建,還能夠抽象構建過程,提供構建任務實現;它跨平臺,對外提供了一致的操作接口,這一切足以使它成為優秀的、流行的構建工具。
 Maven不僅是構建工具,還是一個依賴管理工具和項目管理工具,它提供了中央倉庫,能幫我自動下載構件。
Maven安裝
Windows安裝Maven
在安裝maven之前首先先確定Windows上安裝了Jdk
然后去Maven官網maven.apache.org/download.cg…下載.zip結尾的Maven文件,如下圖:
最后設置環境Maven的環境變量,主要配置M2_HOME和PATH兩項,步驟如下圖:
Mac安裝Maven
第一步和Windows一樣,下載Maven,格式為tar.gz,解壓之后放到你想放到的位置
然后打開終端輸入vim ~/.bash_profile,在環境變量中添加一條export PATH="~/software/Maven/apache-maven-3.5.4/bin":$PATH,后面是我本機根目錄的位置,添加之后:wq保存退出,然后source ~/.bash_profile使配置生效。
輸入mvn -version查看是否安裝成功
Maven目錄
bin目錄
該目錄包含了mvn運行的腳本,這些腳本用來配置java命令,準備好classpath和相關的Java系統屬性,然后執行Java命令。
boot目錄
該目錄只包含一個文件,該文件為plexus-classworlds-2.5.2.jar。plexus-classworlds是一個類加載器框架,相對于默認的java類加載器,它提供了更加豐富的語法以方便配置,Maven使用該框架加載自己的類庫。
conf目錄
該目錄包含了一個非常重要的文件settings.xml。直接修改該文件,就能在機器上全局地定制Maven的行為,一般情況下,我們更偏向于復制該文件至/.m2/目錄下(表示用戶目錄),然后修改該文件,在用戶范圍定制Maven的行為。
lib目錄
該目錄包含了所有Maven運行時需要的Java類庫,Maven本身是分模塊開發的,因此用戶能看到諸如maven-core-3.0.jar、maven-model-3.0.jar之類的文件,此外這里還包含一些Maven用到的第三方依賴如commons-cli-1.2.jar、commons-lang-2.6.jar等等。
Maven常用命令
mvn dependency:tree,查看項目中jar包的依賴數,解決jar包沖突問題。
 mvn clean:表示運行清理操作(會默認把target文件夾中的數據清理)。
 mvn clean compile:表示先運行清理之后運行編譯,會將代碼編譯到target文件夾中。
 mvn clean test:運行清理和測試。
 mvn clean package:運行清理和打包。
 mvn clean install:運行清理和安裝,會將打好的包安裝到本地倉庫中,以便其他的項目可以調用。
 mvn clean deploy:運行清理和發布(發布到私服上面)。
配置setting.xml文件
說明:
 Maven的級別有兩種,一是用戶級別,該級別是默認級別.第二種是全局的配置.一般不生效.但是要求兩種級別的配置文件必須相同,否則會有意想不到的異常.
配置本地倉庫
<!-- Windows中的配置--> <localRepository>E:/software/mvn_repo</localRepository><!-- Mac中的配置 --> <!-- <localRepository>/Users/hxx/software/mvn_repo</localRepository> --> 復制代碼配置阿里中央倉庫
<mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> 復制代碼配置jdk
說明:Maven通過骨架創建項目時默認的JDK版本1.5,所以需要手動修改JDK,但是修改繁瑣,所以添加如下的配置
<!-- 全局jdk配置,settings.xml --> <profile><id>jdk17</id><activation><activeByDefault>true</activeByDefault><jdk>1.7</jdk></activation><properties><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target><maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion></properties> </profile><!-- jdk1.8配置 <profile><id>jdk18</id> <activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> --> 復制代碼Maven在開發工具中的使用
博主現在想要在自己的開發工具中使用自己配置好的Maven,所以來介紹一下,一下是Eclipse和Idea中的Maven配置
基于Eclipse中使用
基于Idea中使用
Maven的使用
xml version="1.0" encoding="UTF-8" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hxxzt</groupId><artifactId>Maventest</artifactId><version>0.0.1-SNAPSHOT</version><name>Maventest</name> </project> 復制代碼這里需要說明一下,這里的groupId、artifactId、version都是自己定義的,與上面解釋的坐標不一樣,坐標是在Maven中央倉庫中的地址,這個定義的是你自己項目的坐標,注意~
-  代碼的第一行是XML頭,指定了該xml文檔的版本和編碼方式。 
-  project是所有pom.xml的根元素,它還聲明了一些POM相關的命名空間及xsd元素。 
-  根元素下的第一個子元素modelVersion指定了當前的POM模型的版本,對于Maven3來說,它只能是4.0.0 
代碼中最重要是包含了groupId,artifactId和version了。這三個元素定義了一個項目基本的坐標,在Maven的世界,任何的jar、pom或者jar都是以基于這些基本的坐標進行區分的。
-  groupId定義了項目屬于哪個組,隨意命名,比如谷歌公司的myapp項目,就取名為 com.google.myapp 
-  artifactId定義了當前Maven項目在組中唯一的ID,比如定義hello-world。 
-  version指定了項目當前的版本0.0.1-SNAPSHOT,SNAPSHOT意為快照,說明該項目還處于開發中,是不穩定的。 
-  name元素生命了一個對于用戶更為友好的項目名稱,雖然這不是必須的,但還是推薦為每個POM聲明name,以方便信息交流 
坐標和依賴
何為坐標?
關于坐標(Coordinate),大家最熟悉的定義應該 來自于平面幾何。在一個平面坐標系中,坐標( x, y)表示該平面上與x軸距離為y,與y軸距離為x的一點,任何一個坐標都能夠唯一標識該平面中的一點。在實際生活中,我們也可以將地址看成是一種坐標。省、市、區、街道等一系列信息同樣可以唯一標識城市中的任一居住地址和工作地址。郵局和快遞公司正是基于這樣一種坐標進行日常工作的。
Maven坐標為各種構件引入了秩序,任何一個構件都必須明確定義自己的坐標,而一組Maven坐標是通過一些 元素定義的,它們是groupId、artifactId、version、packaging、classifier。
依賴的配置
<project> ... <dependencies><dependency><groupId>實際項目</groupId><artifactId>模塊</artifactId><version>版本</version><type>依賴類型</type><scope>依賴范圍</scope><optional>依賴是否可選</optional><!—主要用于排除傳遞性依賴--><exclusions><exclusion><groupId>…</groupId><artifactId>…</artifactId></exclusion></exclusions></dependency> <dependencies> ... </project>復制代碼根元素project下的dependencies可以包含一個或者多個dependency元素,以聲明一個或者多個項目依賴。每個依賴可以包含的元素有:
- grounpId、artifactId和version:以來的基本坐標,對于任何一個依賴來說,基本坐標是最重要的,Maven根據坐標才能找到需要的依賴。
- type:依賴的類型,對于項目坐標定義的packaging。大部分情況下,該元素不必聲明,其默認值為jar
- scope:依賴的范圍
- optional:標記依賴是否可選
- exclusions:用來排除傳遞性依賴
依賴范圍
依賴范圍就是用來控制依賴和三種classpath(編譯classpath,測試classpath、運行classpath)的關系,Maven有如下幾種依賴范圍:
-  compile:編譯依賴范圍。如果沒有指定,就會默認使用該依賴范圍。使用此依賴范圍的Maven依賴,對于編譯、測試、運行三種classpath都有效。典型的例子是spring-code,在編譯、測試和運行的時候都需要使用該依賴。 
-  test: 測試依賴范圍。使用次依賴范圍的Maven依賴,只對于測試classpath有效,在編譯主代碼或者運行項目的使用時將無法使用此依賴。典型的例子是Jnuit,它只有在編譯測試代碼及運行測試的時候才需要。 provided:已提供依賴范圍。使用此依賴范圍的Maven依賴,對于編譯和測試classpath有效,但在運行時候無效。典型的例子是servlet-api,編譯和測試項目的時候需要該依賴,但在運行項目的時候,由于容器以及提供,就不需要Maven重復地引入一遍。 
-  runtime:運行時依賴范圍。使用此依賴范圍的Maven依賴,對于測試和運行classpath有效,但在編譯主代碼時無效。典型的例子是JDBC驅動實現,項目主代碼的編譯只需要JDK提供的JDBC接口,只有在執行測試或者運行項目的時候才需要實現上述接口的具體JDBC驅動。 
-  system:系統依賴范圍。該依賴與三種classpath的關系,和provided依賴范圍完全一致,但是,使用system范圍的依賴時必須通過systemPath元素顯示地指定依賴文件的路徑。由于此類依賴不是通過Maven倉庫解析的,而且往往與本機系統綁定,可能構成構建的不可移植,因此應該謹慎使用。systemPath元素可以引用環境變量,如: 
- import:導入依賴范圍。該依賴范圍不會對三種classpath產生實際的影響。 上述除import以外的各種依賴范圍與三種classpath的關系如下:
總結
后面有需要補充的繼續更新。本篇基于許曉兵《Maven實戰》提煉,亞馬遜購買本書請戳此處—->《Maven實戰》購買
總結
 
                            
                        - 上一篇: Java微信订单查询
- 下一篇: 7 个让您需要渐进式 Web 应用程序做
