目錄
一.Maven
二.Maven的下載安裝
三.Maven創(chuàng)建項(xiàng)目與配置
四.Maven的常用命令
五.Maven依賴管理
六.Mavern插件管理
七.私服搭建
一.Maven
1.1 什么是Maven
Maven是由Apache開(kāi)發(fā)用于項(xiàng)目管理的工具, 是一個(gè)純 Java 開(kāi)發(fā)的開(kāi)源項(xiàng)目;
1.2 Maven的作用
- 項(xiàng)目構(gòu)建: maven提供一套對(duì)項(xiàng)目生命周期管理的標(biāo)準(zhǔn), 開(kāi)發(fā)人員和測(cè)試人員統(tǒng)一使用maven進(jìn)行項(xiàng)目構(gòu)建;
- 管理項(xiàng)目的生命周期:編譯,測(cè)試,打包,部署,運(yùn)行;
- 依賴管理: maven對(duì)項(xiàng)目的第三方構(gòu)件(jar包)進(jìn)行統(tǒng)一管理; 向工程中加入jar包不要手工從其它地方拷貝,通過(guò)maven定義jar包的坐標(biāo), 自動(dòng)從maven倉(cāng)庫(kù)中去下載到工程中;
- 對(duì)工程分模塊構(gòu)建,提高開(kāi)發(fā)效率;
- 文檔生成等等;
1.3 Maven的約定配置
也就是項(xiàng)目目錄結(jié)構(gòu)自動(dòng)生成的配置需要遵守的規(guī)則

二.Maven的安裝
2.1 Maven的安裝
1.將下載到的maven壓縮文件解壓到一個(gè)沒(méi)有中文的目錄;
2.配置環(huán)境變量 MAVEN_HOME和 Path與 JAVA_HOME的配置類(lèi)似;
3.配置 Maven的倉(cāng)庫(kù) Repository;
在maven的安裝目錄中conf/settings.xml文件,在這里配置本地倉(cāng)庫(kù)(Repository)
<localRepository>倉(cāng)庫(kù)路徑</localRepository>
示例:<localRepository>E:/source/04_Maven/repository_pinyougou</localRepository>
4.測(cè)試Maven是否安裝成功
打開(kāi)cmd控制吧,輸入mvn -version;
2.2 Maven的目錄介紹
bin : 命令
boot : 第三方類(lèi)加
conf : 配置文件
lib : maven自身的jar包
2.3 Maven的倉(cāng)庫(kù)和坐標(biāo)
2.3.1 Maven的倉(cāng)庫(kù)
| 倉(cāng)庫(kù)名稱 | 作用 |
|---|---|
| 本地倉(cāng)庫(kù) | 相當(dāng)于緩存, 工程第一次會(huì)從遠(yuǎn)程倉(cāng)庫(kù)(互聯(lián)網(wǎng))去下載jar 包, 將jar包存在本地倉(cāng)庫(kù)(在程序員的電腦上); 第二次不需要從遠(yuǎn)程倉(cāng)庫(kù)去下載, 先從本地倉(cāng)庫(kù)找,如果找不到才會(huì)去遠(yuǎn)程倉(cāng)庫(kù)找; |
| 中央倉(cāng)庫(kù) | 倉(cāng)庫(kù)中jar由專(zhuān)業(yè)團(tuán)隊(duì)(maven團(tuán)隊(duì))統(tǒng)一維護(hù)。中央倉(cāng)庫(kù)的地址:http://repo1.maven.org/maven2/ |
| 遠(yuǎn)程倉(cāng)庫(kù) | 在公司內(nèi)部架設(shè)一臺(tái)私服,其它公司架設(shè)一臺(tái)倉(cāng)庫(kù),對(duì)外公開(kāi); |
2.3.2 Maven的坐標(biāo)
Maven的一個(gè)核心作用就是管理項(xiàng)目的依賴, 引入開(kāi)發(fā)過(guò)程中所需要的各種jar包; 為了能自動(dòng)化的解析任何一個(gè)Java構(gòu)件, Maven必須將這些Jar包或者其他資源進(jìn)行唯一標(biāo)識(shí), 這些標(biāo)識(shí)是管理項(xiàng)目依賴的基礎(chǔ), 也就有了坐標(biāo);
坐標(biāo)的定義元素如下:
groupId: 項(xiàng)目組織唯一的標(biāo)識(shí)符, 實(shí)際對(duì)應(yīng)Java的包的結(jié)構(gòu);(如:com.alibaba)
artifactId: 項(xiàng)目的名稱;
version: 項(xiàng)目的當(dāng)前版本
代碼示例如下:
<dependecies>
<!--druid連接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependecies>
三.IDEA集成Maven
1.配置IDEA的Maver路徑

2.配置參數(shù)(解決創(chuàng)建慢的問(wèn)題) -DarchetypeCatalog=internal

3.最后新創(chuàng)建project,一定不要使用原來(lái)的project, 并且第一次需要聯(lián)網(wǎng);
4.創(chuàng)建出的JavaWeb工程目錄結(jié)構(gòu)圖 (一般不使用骨架創(chuàng)建工程)

四.Maven的常用命令
1.clean命令
清除編譯產(chǎn)生的target文件夾內(nèi)容,可以配合相應(yīng)命令一起使用;
如: mvn clean package, mvn clean test
2.compile命令
該命令可以對(duì)src/main/java目錄的下的代碼進(jìn)行編譯;
3.test命令
測(cè)試命令,或執(zhí)行src/test/java/下所有junit的測(cè)試用例;
4.package命令
mvn package, 打包項(xiàng)目, 打包后的項(xiàng)目可以在target目錄下找到;
如果是JavaSe的項(xiàng)目, 打包成jar包;
如果是JavaWeb的項(xiàng)目, 打包成war包;
5.install命令
打包后將其安裝在本地倉(cāng)庫(kù);(通過(guò)項(xiàng)目的包名可以在倉(cāng)庫(kù)中找到這個(gè)打包文件)

五.依賴管理和插件
5.1導(dǎo)入依賴
<!-- 示例引入junit依賴 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 示例引入servlet依賴 需要注意環(huán)境問(wèn)題,2020版idea與Maven的編譯有沖突,可以在設(shè)置中解決
勾選 maven runner中的 Delegate IDE build/run actions to Maven
-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
5.2 依賴范圍

compile :編譯,測(cè)試,打包運(yùn)行部署有效(默認(rèn));
如:strus-core,spring-beans,C3P0,Druid;
provided:編譯,測(cè)試有效;打包運(yùn)行部署無(wú)效;
如:Servlet,在運(yùn)行時(shí)不用(tomcat容器已提供,強(qiáng)行打包打出去,會(huì)有沖突問(wèn)題)
runtime :測(cè)試,打包,運(yùn)行,部署有效,編譯無(wú)效;
如:JDBC驅(qū)動(dòng)包,在開(kāi)發(fā)代碼中針對(duì)JDBC接口開(kāi)發(fā),編譯不用,在運(yùn)行和測(cè)試是需要通過(guò)JDBC驅(qū)動(dòng)包連接數(shù)據(jù)庫(kù);
test :只是測(cè)試有效,只在單元測(cè)試類(lèi)中用;
六.Maven的插件
6.1 Maven的插件
Maven是一個(gè)核心引擎, 提供了基本的項(xiàng)目處理能力和建設(shè)過(guò)程的管理, 以及一系列的插件來(lái)執(zhí)行實(shí)際建設(shè)任務(wù);
如: 集成JDK插件可以方便修改項(xiàng)目的編譯環(huán)境; 集成Tomcat插件后, 無(wú)需安裝Tomcat服務(wù)器就可以運(yùn)行Tomcat進(jìn)行項(xiàng)目的發(fā)布和測(cè)試;
在pom.xml中通過(guò)plugin標(biāo)簽引入maven的功能插件;
<!-- jdk編譯插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
jdk的編譯版本也可以在maven的setting中配置:
<profile>
<id>jdk1.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>
<encoding>UTF-8</encoding>
</properties>
</profile>
<!-- Tomcat7的編譯插件
如果想使用更高版本的Tomcat,需要到其它的倉(cāng)庫(kù)去下載,因?yàn)橹醒雮}(cāng)庫(kù)是沒(méi)有提供的
-->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!-- 指定端口 -->
<port>82</port>
<!-- 請(qǐng)求路徑 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
6.1 修改Maven的配置
1.修改不使用骨架創(chuàng)建maven項(xiàng)目的默認(rèn)編譯版本
<profile>
<id>jdk1.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>
<encoding>UTF-8</encoding>
</properties>
</profile>
將上述標(biāo)簽內(nèi)容添加到settings文件的<profiles>標(biāo)簽中
2.徹底解決引入依賴的時(shí)候卡、報(bào)錯(cuò)
修改settings.xml文件 (訪問(wèn)中央倉(cāng)庫(kù)是外網(wǎng), 會(huì)比較慢, 可以使用阿里的鏡像) ,添加如下代碼:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>uk</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://uk.maven.org/maven2/</url>
</mirror>
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>nexus</id>
<name>internal nexus repository</name>
<url>http://repo.maven.apache.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
七.Maven私服
7.1 什么是Maven私服
Maven的遠(yuǎn)程倉(cāng)庫(kù)的一種;
公司在自己的局域網(wǎng)內(nèi)搭建自己的遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器, 稱為私服; 私服服務(wù)器即是公司內(nèi)部的maven遠(yuǎn)程倉(cāng)庫(kù), 開(kāi)發(fā)人員的電腦上安裝Maven軟件并且連接私服服務(wù)器, 這樣就可以在內(nèi)部共享jar文件;

7.2 私服的搭建
? 1.下載nexus
? 2.安裝nexus與啟動(dòng)nexus: 解壓到一個(gè)沒(méi)有中文的目錄, 并進(jìn)入bin目錄, 執(zhí)行 nexus.bat install; 以管理員權(quán)限運(yùn)行命令行,進(jìn)入 bin 目錄, 執(zhí)行 nexus.bat install ; 然后在任務(wù)管理器的服務(wù)中查看是否有 nexus;
? 3.卸載nexus: cmd 進(jìn)入 nexus 的 bin 目錄,執(zhí)行: nexus.bat uninstall
? 4.登錄: 訪問(wèn) http://localhost:8081/nexus/ (查看 nexus 的配置文件 conf/nexus.properties ,里面有端口號(hào)) 然后點(diǎn)擊右上角的 Log in, 輸入賬號(hào)和密碼登陸 (賬號(hào)admin,密碼admin123 ); 點(diǎn)擊Repositories顯示倉(cāng)庫(kù)類(lèi)型
倉(cāng)庫(kù)類(lèi)型:
1.hosted
宿主倉(cāng)庫(kù),部署自己的jar到這個(gè)類(lèi)型的倉(cāng)庫(kù),包括 relaeses和 snapshot兩部分,前者是公司內(nèi)部發(fā)布版本倉(cāng)庫(kù)
后者是公司內(nèi)部測(cè)試版本倉(cāng)庫(kù);
2.proxy
代理倉(cāng)庫(kù),用于代理遠(yuǎn)程的公共倉(cāng)庫(kù);如 maven中央倉(cāng)庫(kù),用戶連接私服,私服自動(dòng)去中央倉(cāng)庫(kù)下載 jar或插件;
3.group
倉(cāng)庫(kù)組,用來(lái)合并多個(gè) hosted/proxy倉(cāng)庫(kù),通常配置自己的 maven連接倉(cāng)庫(kù)組;
4.virtual
兼容 maven1版本的jar或插件;
7.3 私服的使用
1.將項(xiàng)目發(fā)布到私服
第一步: 修改maven的setting.xml文件的, 添加如下內(nèi)容:
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
配置連接私服的用戶和密碼 。此用戶名和密碼用于私服校驗(yàn),因?yàn)樗椒枰郎蟼鞯馁~號(hào)和密碼是否和私服中的賬號(hào)和密碼一致 (配置到<servers>標(biāo)簽下);
第二步: 在需要發(fā)布配置項(xiàng)目 pom.xml . 配置私服倉(cāng)庫(kù)的地址,本公司的自己的 jar 包會(huì)上傳到私服的宿主倉(cāng)庫(kù),根據(jù)工程的版本號(hào)決定上傳到哪個(gè)宿主倉(cāng)庫(kù),如果版本為 release 則上傳到私服的 release 倉(cāng)庫(kù),如果版本為snapshot 則上傳到私服的 snapshot 倉(cāng)庫(kù)
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意: pom.xml 這里<id> 和 settings.xml 配置 <id> 對(duì)應(yīng)!
E:\java_develop\nexus-2.12.0-01-bundle\sonatype-work\nexus\storage
第三步: 測(cè)試
首先啟動(dòng) nexus , 然后執(zhí)行 deploy 命令, 然后在 nexus 的 sonatype-work\nexus\storage目錄下通過(guò)包名去查看剛剛上傳到私服的文件;
2.從私服下載jar包
沒(méi)有配置 nexus 之前,如果本地倉(cāng)庫(kù)沒(méi)有,去中央倉(cāng)庫(kù)下載;
通常在企業(yè)中會(huì)在局域網(wǎng)內(nèi)部署一臺(tái)私服服務(wù)器,有了私服本地項(xiàng)目首先去本地倉(cāng)庫(kù)找 jar,如果沒(méi)有找到則連接私服從私服下載 jar 包,如果私服沒(méi)有 jar 包私服同時(shí)作為代理服務(wù)器從中央倉(cāng)庫(kù)下載 jar 包;
在客戶端的 setting.xml 中配置私服的倉(cāng)庫(kù), 由于 setting.xml 中沒(méi)有 repositories 的配置標(biāo)簽需要使用 profile 定義倉(cāng)庫(kù); (配置在<profiles>標(biāo)簽下)
<profile>
<!--profile 的 id-->
<id>dev</id>
<repositories>
<repository>
<!--倉(cāng)庫(kù) id, repositories 可以配置多個(gè)倉(cāng)庫(kù),保證 id 不重復(fù)-->
<id>nexus</id>
<!--倉(cāng)庫(kù)地址,即 nexus 倉(cāng)庫(kù)組的地址-->
<url>http://localhost:8081/nexus/content/groups/public/</url>
<!--是否下載 releases 構(gòu)件-->
<releases>
<enabled>true</enabled>
</releases>
<!--是否下載 snapshots 構(gòu)件-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- 插件倉(cāng)庫(kù), maven 的運(yùn)行依賴插件,也需要從私服下載插件 -->
<pluginRepository>
<!-- 插件倉(cāng)庫(kù)的 id 不允許重復(fù),如果重復(fù)后邊配置會(huì)覆蓋前邊 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
使用 profile 定義倉(cāng)庫(kù)需要激活才可生效
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
3.把第三方j(luò)ar包放入本地倉(cāng)庫(kù)和私服
1.導(dǎo)入本地庫(kù)
示例: 將fastjson-1.2.39的jar放到本地倉(cāng)庫(kù)
找一個(gè)jar測(cè)試, 先 CMD 進(jìn)入到 jar 包所在位置, 然后運(yùn)行下面命令:
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.2.39 -Dfile=fastjson-1.2.39.jar -Dpackaging=jar
在Maven倉(cāng)庫(kù)的 \com\alibaba 目錄下可以找到這個(gè)jar文件
2.導(dǎo)入私服
示例: 將fastjson-1.2.39的jar放到私服倉(cāng)庫(kù)
<!-- 要在 maven 軟件的核心配置文件 settings.xml 中配置第三方倉(cāng)庫(kù)的 server 信息 -->
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
然后 CMD 進(jìn)入到 jar 包所在位置, 然后運(yùn)行下面命令:
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.2.39 -Dpackaging=jar -Dfile=fastjson-1.2.39.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
文件訪問(wèn): 在nexus的 sonatype-work\nexus\storage\thirdparty 目錄下可以找到這個(gè)jar包;
通過(guò)瀏覽器訪問(wèn): "http://localhost:8081/nexus/", 然后nexus——>repositories——>thirdparty可以找到這個(gè)jar包;
3.導(dǎo)入第三方 jar 包時(shí)執(zhí)行的命令參數(shù)
DgroupId 和 DartifactId:
構(gòu)成了該 jar 包在 pom.xml 的坐標(biāo),項(xiàng)目就是依靠這兩個(gè)屬性定位; 自己起名字也行;
Dfile:
表示需要上傳的 jar 包的絕對(duì)路徑;(包含文件名,上面的命令中是使用相對(duì)路徑)
Durl:
私服上倉(cāng)庫(kù)的位置,瀏覽器上訪問(wèn) "http://localhost:8081/nexus/"
然后找到nexus——>repositories 菜單,可以看到該路徑在靠右邊的位置;(沒(méi)有這個(gè)參數(shù)表示本地倉(cāng)庫(kù))
DrepositoryId:
服務(wù)器倉(cāng)庫(kù)的表示 id (表示上傳到哪一個(gè)倉(cāng)庫(kù)),在 nexus 的 configuration 可以看到;
Dversion:
表示版本信息;(解壓jar包,在 MANIFEST.MF 的文件中有描述該包的版本信息);