三、Maven安裝配置
1祝沸、下載
下載解壓即可矮烹。在安裝 Maven 之前,注意:需確保安裝JDK
image
2罩锐、環(huán)境變量配置
-
MAVEN_HOME
maven的bin目錄所在路徑(不包含/bin)
image -
Path
添加 %MAVEN_HOME%/bin
image - maven升級(jí):
下載新版本Maven解壓奉狈,修改M2_HOME路徑即可
3、Maven目錄說明
- 說明
目錄 說明 bin mvn運(yùn)行腳本涩惑,配置java命令, mvn / mvnDebug boot 只包含一個(gè)plexus-classworlds jar包仁期,Maven類加載器框架 conf settings.xml全局maven配置文件,【推薦】復(fù)制該文件至 /.m2/目錄下(表示用戶目錄) lib Maven運(yùn)行需要的Java類庫(kù),Maven jar包以及第三方依賴jar包 - ~/.m2/目錄(默認(rèn)本地倉(cāng)庫(kù)目錄)
- Winodw:
C:\Users${user.home}\ .m2目錄下 - Linux:
直接在根目錄
- Winodw:
4蟀拷、Maven常用配置
- 設(shè)置環(huán)境變量MAVEN_OPTS
通常設(shè)置MAVEN_OPTS的值為-Xms128m -Xmx512m,因?yàn)?strong>mvn命令實(shí)際執(zhí)行java命令碰纬,項(xiàng)目較大時(shí),使用Maven生成項(xiàng)目站點(diǎn)需要占用大量?jī)?nèi)存问芬,如果沒有該配置,容易得到java.lang.OutOfMemeryException寿桨。 - 配置用戶settings.xml
用戶可選擇配置conf中的全局配置或.m2目錄下的用戶配置此衅,推薦使用用戶配置,避免影響系統(tǒng)中其他用戶亭螟,并且配置用戶配置便于maven升級(jí)挡鞍,因?yàn)镸aven升級(jí)后,conf下的全局配置需要重新設(shè)置预烙,而.m2下的用戶配置不變墨微。 - 不使用IDE內(nèi)嵌Maven
IDE集成的Maven,有些時(shí)候我們需要在終端上進(jìn)行命令的操作,可能會(huì)造成版本不一致的問題扁掸。
5翘县、settings.xml
settings.xml分類全局配置和用戶配置,
全局配置直接修改安裝目錄下conf目錄下的settings.xml文件即可
image用戶配置將settings.xml文件復(fù)制到.m2目錄下即可
imageMaven的配置文件遵循就近原則;也就是說
User Setting
可以覆蓋Global Setting
6谴分、settings.xml文件內(nèi)容
主要修改的地方有三個(gè),修改本地倉(cāng)庫(kù),國(guó)內(nèi)鏡像服務(wù)器,配置jdk的版本
- 修改本地倉(cāng)庫(kù)
<localRepository>絕對(duì)路徑</localRepository> <!-- 例如 --> <localRepository>D:\tools\apache-maven\repository</localRepository>
- 配置阿里云鏡像倉(cāng)庫(kù)锈麸。在mirrors標(biāo)簽里添加以下一段即可
<mirror> <!-- 倉(cāng)庫(kù)id--> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <!-- 1. 配置成* 就代表我們通過訪問阿里云的maven倉(cāng)庫(kù)從而訪問網(wǎng)路上所有的遠(yuǎn)程倉(cāng)庫(kù), 2. 配置成central牺蹄,就代表我們通過阿里云訪問central倉(cāng)庫(kù)忘伞,及 http://central.maven.org/maven2, 3. 如果配置成repo1,就代表通過阿里云訪問http://repo1.maven.org/maven2沙兰,阿里云和這些遠(yuǎn)程倉(cāng)庫(kù)之間必須可以鏡像氓奈,存在一定的鏡像關(guān)系。--> <mirrorOf>*</mirrorOf> <!-- 可選 --> <repository> <releases> <!-- 下載發(fā)布版構(gòu)件 --> <enabled>true</enabled> <!-- Maven 從遠(yuǎn)程倉(cāng)庫(kù)更新的頻率 never(從不) daily(每天一次,默認(rèn)) always(每次構(gòu)建都檢查更新) interval:X(每隔X分鐘檢查一次,X為任意整數(shù)) --> <updatePolicy>never</updatePolicy> <!-- 檢驗(yàn)文件的策略,如果校驗(yàn)失敗: warn(默認(rèn)):輸出警告信息 fail: 構(gòu)建失敗 ignore: 忽略 --> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <!-- 不從中央倉(cāng)庫(kù)下載快照版本的構(gòu)件 --> <enabled>false</enabled> </snapshots> </repository> </mirror>
# 常用的倉(cāng)庫(kù) 1鼎天、http://maven.aliyun.com/nexus/content/groups/public/ 阿里云 (強(qiáng)力推薦) 2舀奶、http://www.sonatype.org/nexus/ 私服nexus工具使用 3、http://mvnrepository.com/ (推薦) 4训措、http://repo1.maven.org/maven2 5伪节、http://repo2.maven.org/maven2/ 私服nexus工具使用 6、http://uk.maven.org/maven2/ 7绩鸣、http://repository.jboss.org/nexus/content/groups/public 8怀大、http://maven.oschina.net/content/groups/public/ 9、http://mirrors.ibiblio.org/maven2/ 10呀闻、http://maven.antelink.com/content/repositories/central/ 11化借、http://nexus.openkoala.org/nexus/content/groups/Koala-release/ 12、http://maven.tmatesoft.com/content/groups/public/
- 在profiles標(biāo)簽下加入以下一段話修改jdk版本捡多。按自己所需配置即可
<profile> <id>jdk-1.8</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>
四蓖康、創(chuàng)建工程
1铐炫、使用Maven命令創(chuàng)建(了解)
- 命令
mvn org.apache.maven.plugins:maven-archetype-plugin:3.1.1:generate 簡(jiǎn)寫方式 mvn archetype:generate
- 選擇archetype(項(xiàng)目骨架)
執(zhí)行插件之后會(huì)列出很多可用的Archetype列表,每一個(gè)Archetype前面都會(huì)對(duì)應(yīng)有一個(gè)編號(hào),同時(shí)命令行會(huì)提示一個(gè)默認(rèn)的編號(hào)蒜焊,其對(duì)應(yīng)的Archetype為maven-archetype-quickstart創(chuàng)建普通java工程,
直接回車或選擇而maven-archetype-webapp骨架則是用來創(chuàng)建一個(gè)JavaWeb Project倒信,或輸入指定編號(hào)回車
緊接著會(huì)Maven會(huì)提示輸入要?jiǎng)?chuàng)建項(xiàng)目的groupId、artifactId泳梆、version以及包名package,確認(rèn)后即可生成一個(gè)maven項(xiàng)目鳖悠。
image
image - 一行命令
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
2、項(xiàng)目結(jié)構(gòu)說明
- java工程
├── pom.xml 核心配置文件 └── src 源文件 ├── main 存放主程序 │ └── java 存放Java源代碼代碼 │ └── com.wener.hello 定義包名為項(xiàng)目組.項(xiàng)目名优妙,所有java類都在該包下創(chuàng)建 │ └── App.java └── test 測(cè)試目錄 └── java └── com.wener.hello └── AppTest.java 測(cè)試Java代碼
- web工程
├── pom.xml └── src └── main ├── resources 存放框架的配置文件等 └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
- 實(shí)戰(zhàn)開發(fā)中完整的結(jié)構(gòu)
├── pom.xml └── src 源文件 ├── main 存放主程序 │ ├── java 存放Java源代碼代碼 │ ├── resources 核心配置文件 │ └── webapp web應(yīng)用的目錄 │ ├── WEB-INF │ │ └── web.xml web應(yīng)用程序入口配置 │ └── index.jsp └── test ├── java 測(cè)試目錄 └── resources 存放測(cè)試框架的配置文件等
3乘综、為什么要固定項(xiàng)目結(jié)構(gòu)
- Maven 要負(fù)責(zé)項(xiàng)目的自動(dòng)化構(gòu)建,以編譯為例套硼,Maven 要想自動(dòng)進(jìn)行編譯卡辰,那么它必須知道 Java 的源文件保存在哪里,這樣約定之后邪意,不用我們手動(dòng)指定位置九妈,Maven 能知道位置,從而幫我們完成自動(dòng)編譯抄罕。
- 遵循 約定—>配置--->編碼允蚣。即能進(jìn)行配置的不要去編碼指定,能事先約定規(guī)則的不要去進(jìn)行配置呆贿。這樣既減輕了勞動(dòng)力嚷兔,也能防止出錯(cuò)。當(dāng)然我們也可以手動(dòng)去配置,但不推薦
4做入、其它常用maven命令(了解)
- mvn clean
說明: 清理項(xiàng)目生產(chǎn)的臨時(shí)文件,一般是模塊下的target目錄 - mvn compile
前面我們按照maven約束好的文件路徑建好項(xiàng)目后冒晰,加入pom.xml 在命令行輸入mvn compile后,maven就會(huì)自動(dòng)幫我們下載依賴jar竟块,為代碼生成字節(jié)碼文件等壶运。我們把這個(gè)過程稱為 編譯。 - mvn package
說明: 項(xiàng)目打包工具,會(huì)在模塊下的target目錄生成jar或war等文件 - mvn test
說明: 測(cè)試命令,或執(zhí)行src/test/java/下junit的測(cè)試用例. - mvn install
說明: 模塊安裝命令 將打包的的jar/war文件復(fù)制到你的本地倉(cāng)庫(kù)中,供其他模塊使用 -Dmaven.test.skip=true 跳過測(cè)試(同時(shí)會(huì)跳過test compile) - mvn deploy
說明: 發(fā)布命令 將打包的文件發(fā)布到遠(yuǎn)程參考,提供其他人員進(jìn)行下載依賴 ,一般是發(fā)布到公司的私服
五浪秘、pom,xml
- 說明
Project Object Model 項(xiàng)目對(duì)象模型蒋情,Maven 的核心配置文件,pom.xml耸携,與構(gòu)建過程相關(guān)的一切設(shè)置都在這個(gè)文件中進(jìn)行配置 - 內(nèi)容說明
<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"> <!-- 模型版本棵癣。maven2 maven3 必須是這樣寫,固定格式--> <modelVersion>4.0.0</modelVersion> <!-- 公司或者組織的唯一標(biāo)志夺衍,公司域名反寫 必要--> <groupId>com.wener</groupId> <!-- 本項(xiàng)目的唯一ID狈谊,一個(gè)groupId下面可能多個(gè)項(xiàng)目,就是靠artifactId來區(qū)分的 必要--> <artifactId>demo</artifactId> <!-- 本項(xiàng)目目前所處的版本號(hào) 必要--> <version>1.0-SNAPSHOT</version> <!-- 打包的機(jī)制,如pom,jar, war, maven-plugin, ejb, ear, rar, par河劝,默認(rèn)為jar --> <packaging>jar</packaging> <!--聲明了一個(gè)對(duì)用戶更為友好的項(xiàng)目名稱壁榕,非必須,推薦聲明赎瞎, --> <name>demo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 依賴管理 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>