1,maven下載地址:maven.apache.org
到達該頁面找到左側download,然後下載Binary zip archive對應的zip包。
2,配置maven環境變量。
找到環境變量(這裏設置系統變量,用戶變量同理,這裏略),比如我下載的maven解壓在"D:\DevelopmentRoot\apache-maven-3.5.2",點擊新建按鈕,變量名爲"m2_HOME",變量值爲"D:\DevelopmentRoot\apache-maven-3.5.2",點擊確定按鈕。然後找到path並編輯,在末尾填寫";%m2_HOME%\bin;",點擊確定。打開cmd,輸入"mvn -v",如果此時出來maven版本號等相關信息,則說明我們部署maven成功了。
3,maven的目錄結構:
src目錄爲一級目錄;main及test及resources目錄爲二級目錄;在main目錄下爲java目錄(三級目錄),同理test目錄下也爲java目錄(三級目錄);在java目錄下爲package目錄(四級目錄)。
4,按照以上maven目錄結構創建相應的maven項目。
可到以下地址下載相應maven項目:http://download.csdn.net/download/qq_35255384/10162473
需要注意的是:Assert.assertEquals方法中的兩個參數要相等,如果不相等則會報錯,詳情可百度查找該方法使用
6,編寫好後,打開cmd,切換到4步驟中創建的maven項目地址,比如我創建項目的地址是:D:\code\maven01,切換到該地址下,輸入命令:mvn compile 進行編譯(第一次執行時間較長,請耐心等待),執行完後,繼續執行命令:mvn test ,這個時候會在maven項目中生成一個target的文件夾,該文件夾與src文件夾平級放置,裏面包含一些測試報告及相關編譯後等class文件等。繼續輸入命令:mvn package ,則會在target文件夾裏生成一個該maven項目的jar包
------------------clean,install命令使用及maven座標、打包地址講解
7,maven常用的構建命令:
mvn -v 查看maven版本;mvn compile 編譯maven項目;mvn test對該項目進行測試,生成相應測試報告等;mvn package 打包
mvn clean 刪除target文件夾(包含該文件夾下所有相關文件) mvn install 安裝jar包到本地倉庫中
其中 mvn clean使用較簡單,這裏不詳細說明,mvn install的命令表示爲某個maven項目打包,比如:我此時想將以上創建的maven01項目打成一個類似於junit的jar包供另一個項目maven02使用,則首先我們在使用命令行打包時切換地址到maven01項目下,假如maven01項目地址:D:\code\maven01,輸入cmd後切換到D:\code\maven01地址下,然後輸入mvn install命令後則會爲maven01打個jar包,那麼該jar包會放在哪裏呢?
默認情況下,該jar包會放在本地倉庫:C:\Users\Administrator\.m2\repository下,如果此時你的maven01項目的pom.xml配置的groupId爲:com.imooc.maven01
artifactId爲:maven01-model,version爲:0.0.1SNAPSHOT。以下截取maven01項目中配置情況:
<groupId>com.imooc.maven01</groupId>
<!--artifactId表示模塊名,這裏建議使用項目名-->
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>
則相應的在打maven01的jar包時,會依次根據groupId、artifactId、version生成相應文件夾,所以最後可以查找到本地倉庫放置maven01的jar包地址爲:
C:\Users\Administrator\.m2\repository\com\imooc\maven01\maven01-model\0.0.1SNAPSHOT下,如果本地倉庫找不到jar包,maven會到中央倉庫中進行下載,這也是爲什麼我們引入junit的jar包時並沒有對junit的相關類使用mvn install命令但還是能在本地倉庫中找到junit的jar包的原因。其實,從專業角度來說,pom.xml中的groupId、artifactId、version三個標籤就構成了一個座標,通過這個座標就能找到其在倉庫中的具體位置,這在後面章節中會逐步說明。(maven02的項目可參照maven01來創建,其中maven02的pom.xml配置如下:
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.imooc.maven02</groupId>
<!--artifactId表示模塊名,這裏建議使用項目名-->
<artifactId>maven02-model</artifactId>
<version>0.0.1SNAPSHOT</version>
<!--配置junit的依賴包-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<!--添加maven01項目的jar依賴-->
<dependency>
<groupId>com.imooc.maven01</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>
</dependency>
</dependencies>
</project>
)
------------------------maven插件archetype之如何學會自動建立maven目錄骨架
兩種方式:
方式1:首先cmd後切換到想要建立maven工程的地址,比如我想在D:\code下建一個maven03的maven項目,並自動生成maven骨架,切換到D:\code後,輸入:mvn archetype:generate後按回車鍵,會出現Choose a number or apply filter.............(即讓你輸入一個數字),這裏輸入:6然後按回車鍵,此時出現Choose org.apache.maven.archetypes:.......version:(大概意思是讓你輸入一個archetype插件的版本號),輸入:4然後按回車鍵(maven此時會幫你下載該版本的archetype插件,所以稍等一會兒)。此時出現Define
value for property 'groupId':(讓你輸入groupId編號,如果不清楚groupId則看前面內容,這裏略),輸入:com.maven03然後按回車,此時出現:Define value for property 'artifactId':,輸入:maven03-model然後按回車鍵,此時出現:Define value for property 'version' 1.0-SNAPSHOT:,輸入:0.0.1SNAPSHOT然後按回車鍵,出現:package:,輸入:com.cn.maven.model,然後按回車鍵,此時出現Y::,輸入y然後按回車鍵,直到看到builed
success!則表示構建成功,此時會在D:\code下生成文件夾:maven03-model,裏面包含pom.xml及相關maven目錄結構。
方式2:cmd切換到D:\code下,依次輸入:mvn archetype:generate -DgroupId=com.maven04 -DartifactId=maven04-demo -Dversion=0.0.1SNAPSHOT -Dpackage=com.maven04 然後按回車鍵,之後出現Choose a number or apply filter.............(即讓你輸入一個數字),這裏輸入:6然後按回車鍵,此時出現Choose org.apache.maven.archetypes:.......version:(大概意思是讓你輸入一個archetype插件的版本號),輸入:4然後按回車鍵(maven此時會幫你下載該版本的archetype插件,所以稍等一會兒)。知道看到Build Success字樣表明你已創建成功。
----------------------maven座標命名規範
一般groupId標籤用:網址簡寫+項目名來進行命名。比如:com.imooc.maven04;artifactId標籤用:項目名+模塊名來進行命名,比如:maven04-model;version標籤表示版本號。
----------maven本地倉庫及遠程倉庫、鏡像倉庫地址及如何修改默認的本地倉庫地址
maven本地倉庫的默認地址:C:\Users\Administrator\.m2\repository
全球遠程倉庫地址查找方式:在下載的maven文件夾裏,在lib中找到jar包名爲:maven-model-builder-3.5.2.jar(根據自己版本而定具體名字),將其解壓,找到org\apache\maven\model下,有個pom-4.0.0.xml(超級文本),編輯器打開,找到第一個如下標籤:
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
其中的url值:https://repo.maven.apache.org/maven2即爲全球中央倉庫地址。
鏡像倉庫,可以理解成就是一種倉庫,用來存放資源的地方,與本地倉庫、遠程倉庫作用一樣,默認鏡像倉庫是沒有被放開的,即默認處於關閉狀態,
可在conf文件夾裏面的settings.xml文件中找到,大概是152行,如下:
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
其中,id標籤爲一,mirrorOf可自己定義(也可用通配符*號,表示匹配所有鏡像倉庫),name表示鏡像名,可自己定義,url表示你要去下載的資源地址。
注:鏡像倉庫一旦開啓,所有指向其他倉庫的訪問都會跳轉到鏡像倉庫來,所以一般慎重使用。
比如,我這裏引用國內鏡像倉庫:
<mirror>
<id>maven04</id>
<mirrorOf>central</mirrorOf>
<name>central in china</name>
<url>http://maven.net.cn/content/groups/public</url>
</mirror>
怎樣修改默認的本地倉庫地址呢?
找到conf文件夾下的settings.xml文件,將裏面註釋掉的localRepository標籤(因爲默認是關閉的,選用以上的默認地址,需要手動放開進行修改),
比如我想要將我的本地倉庫放在D:\code\repository中,則可以這樣標記localRepository標籤:
<localRepository>D:/code/repository</localRepository>
此時可以通過mvn compile或其他命令來進行驗證,執行命令會在D:/code/repository中下載一些資源。
--------------------------eclipse中安裝maven插件及使用maven進行打包
首先下載好maven插件,解壓後將該文件直接copy到eclipse的dropins文件夾中,然後重啓eclipse即可(這種方法簡單粗暴且屢試不爽)。
需要配置eclipse指向下載好的maven插件,按以下步驟進行搜索填寫:
打開eclipse--->windows----->preferences---->Maven------->Installations(右側點擊Add按鈕,Installation home右側點擊Directory按鈕,指向下載的maven插件文件地址,點擊確定即可)---->User settings(右側Global settings表示全局設置,User settings表示當前用戶下設置,點擊右側browser按鈕,指向下載的maven插件下的conf文件裏的settings地址)--->點擊確定即可。
安裝完畢後,新建maven工程,默認會選擇........quickstart版本的archetype自動創建maven骨架的插件,點擊下一步,此時會讓你輸入:groupId,artifactId,最後點擊finish即可。要運行maven項目進行打包等操作時,找到pom.xml配置文件,右鍵Run as找到maven build,會讓你選擇哪一種命令來操作,在右側Goals文本框中輸入:package,點擊Run,直到控制檯輸入Build Success字樣表示打包成功,此時,在工作空間中即可找到該jar包。
-----------maven聲明週期瞭解
完整的項目構建過程:清理、編譯、測試、打包、集成測試、驗證、部署。
maven聲明週期:clean清理項目;default構建項目;site生成站點。
clean清理項目分爲:pre-clean執行清理前的工作;clean清理上一次構建生成的所有文件;post-clean執行清理後的文件。
default構建項目(核心):compile,test,package,install
site生成項目站點:pre-site在生成項目站點前要完成的工作;site生成項目站點文檔;post-site生成站點後要完成的工作;site-deploy發佈生成的站點到服務器上。
------------怎樣修改maven默認的jdk版本?
maven默認的jdk版本是jdk1.5,這就會導致我們打包後在JRE System Library中看到jdk爲1.5的版本,實際上我們項目中用到的可能是1.7或者1.8或者其他,那麼怎麼修改呢?
找到maven文件中conf文件下的settings.xml文件,找到<profiles>標籤,在裏面添加:
<profile>
<id>jdk-1.7</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>
之後在新建maven項目,就會看到jdk爲1.7了,當然如果想默認是其他jdk版本,只要修改該參數即可。
------------pom.xml解析
<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">
<!-- 指定當前pom的版本 -->
<modelVersion>4.0.0</modelVersion>
<groupId>反寫的公司網址+項目名</groupId>
<artifactId>項目名+模塊名</artifactId>
<!-- 一般版本號爲三位數字,第一個數字表示大版本號;第二個數字表示分支版本號;第三個數字版本號表示小版本號。
版本後綴含義:snapshot快照,alpha內部測試,beta公測,Release穩定版本,GA正式發佈 -->
<version>當前項目版本號</version>
<packaging>打包方式,默認爲jar,還有war,zip,pom等格式</packaging>
<!-- 項目描述名 -->
<name>maven1-model</name>
<!-- 項目地址 -->
<url>http://maven.apache.org</url>
<description>項目描述信息</description>
<developers>開發者信息</developers>
<licenses>許可證信息</licenses>
<organization>組織信息</organization>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<!-- scope標籤表示依賴範圍,有6個值,分別爲:compile,provided,runtime,test,system,import
compile:默認的範圍,編譯、測試、運行都有效
provided:在編譯和測試時有效
runtime:在測試和運行時有效
test:只在測試範圍有效
system:與本機系統相關聯,可移植性差
import:導入的範圍,它只使用在dependencyManager標籤中,表示從其他的pom中導入dependency的配置
-->
<scope></scope>
<!-- 設置依賴是否可選 默認false -->
<optional></optional>
<!-- 排除依賴傳遞列表 -->
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 依賴的管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<-------------->
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- -->
<parent></parent>
<modules>
<module></module>
</modules>
<build>
<!-- 插件列表 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
關於maven的依賴傳遞可參照我的另一篇文章:http://blog.csdn.net/qq_35255384/article/details/78857619
maven的依賴衝突遵循兩個原則:短路優先及就近原則。
短路優先:比如B依賴A,C依賴B,按照依賴傳遞性,則有C-->B-->A的關係,
如果此時A引入spring的jar包爲1.2版本,B引入spring的jar包爲1.5版本,則C最終引入spring的jar包爲1.5版本
就近原則:比如C依賴A,同時C依賴B,但C的pom.xml配置中先寫的是A的座標,A引入了jdbc的jar包版本爲2.3,B引入了jdbc的jar包版本爲2.8,則C最終引入的是2.3版本。關於maven的聚合和集成可參照我的另一篇文章:http://blog.csdn.net/qq_35255384/article/details/78858211
------------------------------------如何用maven創建web項目以及如何使用服務器插件運行web項目
首先新建maven項目,選擇artifact Id爲web-app結尾(表示新建的是web項目)的archetype版本,GroupId填寫:com.org.web-app;Artifact Id填寫:webDemo,點擊finish。
新建完web項目後jsp會報錯,這是因爲缺少servlet-api.jar包,進入maven中央倉庫:http://mvnrepository.com/ ,搜索servlet-api.jar,然後將該jar包座標填寫到pom.xml中需要注意的是:該jar包的依賴範圍爲:provided(表示只在打包測試時用到,正式發佈不用,因爲容器自帶,引入可能導致衝突)。在Java Resource下補全maven項目結構:依次新建文件夾:src/main/java及src/test/java兩個文件夾。然後右鍵項目-->build path-->在source中查看文件的輸出位置=是否指向target/classes,如果不是則需要進行修改。點擊Project Facets查看Dynamic Web Module是否勾選(沒勾選需要選中,表示此項目爲Web動態項目)。最後點擊OK。
怎樣用jetty/tomcat插件來運行該項目呢?
首先在maven中央倉庫中搜索:jetty-maven,找到jetty插件的座標,填寫到pom.xml中(tomcat同理),完整的pom.xml如下:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.org.web-app</groupId>
<artifactId>webDemo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>webDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- 添加servlet-api.jar,依賴範圍僅限於打包和測試運行發佈則不需要 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- 添加jetty插件
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.8.v20171121</version>-->
<!-- 使用tomcat插件運行 -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<!-- 在打包成功後使用jetty:run來運行jetty -->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>webDemo</finalName>
</build>
</project>
最後點擊項目右鍵--->run as Maven build--->輸入package直到出現start字樣表示成功啓動服務(第一次啓動下載東西較多,會慢點)。
jetty訪問地址:http://localhost:8080/
tomcat訪問地址:http://localhost:8080/webDemo/
需要注意的是,如果pom.xml中沒有加入<executions>標籤內容,則運行項目時輸入:jetty:run或者tomcat:run即可運行。
---------------------mvn配置exec插件並運行java指定文件的main方法可參照以下地址:
https://segmentfault.com/a/1190000005043251
-----如何用maven將本地jar包放入本地倉庫中並在項目中進行引用
https://www.cnblogs.com/lixuwu/p/5855031.html