Maven:java
Maven是Apache公司開源項目。是一個項目構建工具。用來依賴管理。web
一樣的項目,使用Maven開發項目相對於傳統方式開發項目佔用的空間要小,由於Maven項目沒有Jar包信息。由於Maven項目的Jar包信息都在Jar包倉庫(又稱Maven倉庫)中。tomcat
Maven查找Jar包的過程主要的核心就是依賴管理。當Maven項目中須要某一個Jar包,只須要在Maven項目中配置須要Jar包座標信息。Maven程序根據Jar包座標信息去Jar包倉庫中去查找Jar包。app
座標信息實例:struts2-core-2.3.24.jar Apache(公司名稱/域名)+struts2(項目名稱)+2.3.24(版本信息)eclipse
好處:webapp
一、再也不拷貝jar包。項目不須要存放jar包。致使項目源代碼體積小。
二、使用maven開發的項目,若環境統一導入別的maven的項目不會報錯。
三、代碼耦合度進一步下降。
四、方便項目進行升級。
五、節省人力成本。maven
優點如何實現:ide
Maven的倆大核心:
依賴管理:對jar包進行管理的過程。
項目構建:項目在編碼完成後,對項目進行編譯、測試、打包、部署一系列的操做都是經過命令來實現。工具
經過maven命令將web項目發佈到tomcat:
一、cmd命令行進入該發佈項目的根目錄。
二、運行命令:mvn tomcat:run單元測試
配置:
配置環境變量:
變量名:MAVEN_HOME
變量值:指定到maven解壓後的根目錄。
將maven_home環境變量配置到path變量中。
配置本地倉庫:
在maven中的setting.xml中配置:
<localRepository>jar包倉庫根目錄</localRepository>
maven項目核心配置文件:pom.xml
Maven的cmd經常使用命令:
clean:清理。mvn clean 去除項目中根目錄的target目錄。
compile:編譯。mvn compile 將編譯完成的.class文件存放在項目根目錄的target下。
test:單元測試。mvn test 將項目根目錄下的src/test/java中的單元測試類所有執行。在src/test/java下的類名有XXXTest.java的要求。
package:打包。mvn package 將項目打包,打包項目根目錄下的target目錄。
install:安裝。解決本地多個項目公用一個jar包。mvn install 打包並放在jar包本地倉庫。
Maven項目生命週期:
在maven中存在」三套「生命週期,每一套生命週期都是相互獨立的,互不影響。在一套生命週期內,執行後面的命令前面命令會自動執行。
CleanLifeCycle:清理生命週期。clean命令
defaultLifeCycle:默認生命週期。compile、test、package、install、deploy命令
siteLifeCycle:站點生命週期。site命令
配置Eclipse中的Maven環境:
一、配置m2e插件,Mars2版本自帶maven插件。
二、配置maven程序:
window >> preferences >> Maven >> Installations >> Add >> 單擊Directory選擇解壓的maven安裝包.OK >> 勾選配置的maven >> OK
三、配置userSetting,讓eclipse知道本地倉庫的位置:
window >> preferences >> Maven >> User Settings >> 在User Settings中選擇解壓maven的安裝包的conf/settings.xml配置文件。
四、構建索引:
window >> show view >> maven Repository >> 右擊Local Repository(路徑) >> Rebuild Index 來構建索引
建立Maven項目:
建立Maven項目後,勾選Create a simple project ,group id 域名、Artifact Id 項目名、Version 版本。Maven項目建好以後在src/main/webapp下會缺失WEB-INF/web.xml文件,須要手動建立。在pom.xml中設置編譯版本。而後 右擊項目名 >> maven >> update project >> 選擇當前項目 >> OK 會指定編譯版本。
查找依賴:
項目創建完成後,須要查找依賴(就是jar包):打開pom.xml,選擇Dependencies >> Add >> 選擇版本,添加依賴(jar包)。
依賴範圍:
依賴範圍:默認值 complie。
complie:做用在在編譯、測試、運行期間。
test:做用在測試期間。
provided:做用在編譯、測試期間。
runtime:做用在測試、運行期間。
system:做用在編譯、測試期間。
運行就是部署到tomcat。若是使用到tomcat自帶jar包,須要將項目中依賴做用範圍設置爲provided。
運行Maven:
右擊項目>>run as/debug as >> maven build...
而後在Goals中手動輸入運行命令tomcat:run。而在debug as調試運行時,在該界面須要選擇source選項關聯下源碼才能調試:
source >> Add >> project >> 選擇調試的項目 >> OK
傳遞依賴衝突解決:
傳遞依賴:A(項目)依賴B(jar包),B依賴C(jar包),那麼B就是A的直接依賴,C是A的傳遞依賴。若導入依賴D,D依賴C,B和D依賴的C版本不一樣。則會形成版本依賴衝突。
Maven調解原則:
一、第一聲明者優先原則:使用先聲明定義的傳遞依賴。
二、路徑近者優先原則:直接依賴級別高與傳遞依賴。
Maven排除依賴:
在pom.xml中選擇Dependency Hierarchy >> 右擊要排除的依賴 >> Exclude Maven Artifact... >> OK
Maven版本鎖定:
指定項目中依賴的版本。
<!-- 屬性 --> <properties> <test.version>版本號</test.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId></groupId> <artifactId></artifactId> <!-- OGNL表達式 --> <version>${test.version}</version> </dependency> <dependency> <groupId></groupId> <artifactId></artifactId> <!-- 也能夠直接指定版本號 --> <version>x.x.x</version> </dependency> ...... </dependencies> </dependencyManagement>
經過Maven對項目進行拆分、聚合:
建立maven父工程:
一、在父工程中只有pom.xml文件,父工程不進行編碼。
二、項目中須要的依賴信息,只須要在父工程中定義,子模塊繼承。
三、將建立好的父工程發佈到本地倉庫。若父工程未發佈到本地倉庫,那麼在發佈子工程時會報錯。
單元測試:
批量加載Spring配置文件:
classpath:applicationContext.xml 加載本項目的指定配置文件。
classpath:applicationContext-*.xml 加載本項目中以applicationContext-開頭的配置文件。
classpath*:applicationContext-*.xml 加載本項目和依賴包中全部以applicationContext-開頭的配置文件。
私服安裝:
一、安裝包nexus-x.x-bundle.zip解壓。
二、使用管理員打開dos,在dos下執行命令安裝私服。
三、進入解壓包下的bin目錄,執行:nexus install
四、啓動服務:nexus start
五、默認端口號8081,http://ip:8081/nexus/
私服倉庫類型:
hosted:宿主倉庫。存放本公司開發的jar包
> Snapshots:測試版本
> Releases:正式版本
> 3rd party:第三方,存在版權問題-Oracle
proxy:代理倉庫
> Central:代理中央倉庫
> Apache Snapshots:Apache下測試版本的jar包
group:組倉庫;包含宿主參數和代理倉庫。
virtual:虛擬倉庫。
上傳Jar包到私服:
一、在maven目錄下conf/setting.xml認證:配置用戶名/密碼。
<server> <!-- 宿主倉庫id --> <id>releases</id> <!-- 用戶名 --> <username>admin</username> <!-- 密碼 --> <password>admin123</password> </server> <server> <!-- 宿主倉庫id --> <id>snapshots</id> <!-- 用戶名 --> <username>admin</username> <!-- 密碼 --> <password>admin123</password> </server>
二、在將要上傳的項目的pom.xml中配置jar包上傳路徑url
<distributionManagement> <repository> <id>releases</id> <url>http://ip:8081/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://ip:8081/nexus/content/repositories/snapshot</url> </snapshotRepository> </distributionManagement>
執行命令上傳項目到私服:deploy
下載Jar包到本地倉庫:在Maven目錄下conf/settings.xml配置模板。
激活模板:
<activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>