1 Maven介紹1.1 項目開發中遇到的問題html
一、都是一樣的代碼,爲何在個人機器上能夠編譯執行,而在他的機器上就不行?java
二、爲何在個人機器上能夠正常打包,而配置管理員卻打不出來?web
三、項目組加入了新的人員,我要給他說明編譯環境如何設置,可是讓我撓頭的是,有些細節我也記不清楚了。spring
四、個人項目依賴一些jar包,我應該把他們放哪裏?放源碼庫裏?數據庫
五、這是我開發的第二個項目,仍是須要上面的那些jar包,再把它們複製到我當前項目的svn庫裏吧apache
六、如今是第三次,再複製一次吧 ----- 這樣真的好嗎?api
七、我寫了一個數據庫相關的通用類,而且推薦給了其餘項目組,如今已經有五個項目組在使用它了,今天我發現了一個bug,並修正了它,我會把jar包經過郵件發給其餘項目組緩存
-----這不是一個好的分發機制,太多的環節可能致使出現bugtomcat
八、項目進入測試階段,天天都要向測試服務器部署一版。每次都手動部署,太麻煩了。服務器
1.2 什麼是maven
Maven是基於項目對象模型(POM),能夠經過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。
Maven是跨平臺的項目管理工具。主要服務於基於Java平臺的項目構建,依賴管理和項目信息管理。
Maven主要有兩個功能:
一、項目構建
二、依賴管理
1.3 什麼是構建
構建過程:
1.4 項目構建的方式
一、Eclipse
手工操做較多,項目的構建過程都是獨立的,很難一步完成。好比:編譯、測試、部署等。
開發時每一個人的IDE配置都不一樣,很容易出現本地代碼換個地方編譯就出錯
二、Ant
Ant只是一個項目構建工具,它沒有集成依賴管理。
Ant在進行項目構建時,它沒有對項目目錄結構進行約定,須要手動指定源文件、類文件等目錄地址。同時它執行task時,須要顯示指定依賴的task,這樣會形成大量的代碼重複。
三、Maven
Maven不只是一個項目構建工具,更是一個項目管理工具。它在項目構建工程中,比ant更全面,更靈活。
Maven在進行項目構建時,它對項目目錄結構擁有約定,知道你的源代碼在哪裏,類文件應該放到哪裏去。
它擁有生命週期的概念,maven的生命週期是有順序的,在執行後面的生命週期的任務時,不須要顯示的配置前面任務的生命週期。例如執行 mvn install 就能夠自動執行編譯,測試,打包等構建過程
1.5 Maven模型
1 Maven安裝配置1.1 下載maven
官方網站:http://maven.apache.org
本課程使用的maven的版本爲3.0.5
Maven是使用java開發,須要安裝jdk1.6以上,推薦使用1.7
1.2 Maven的安裝
第一步:安裝jdk,要求1.6或以上版本。
第二步:把maven解壓縮,解壓目錄最好不要有中文。
第三步:配置環境變量MAVEN_HOME
第四步:配置環境變量PATH,將%MAVEN_HOME%bin加入Path中,在Windows中必定要注意要用分號;與其餘值隔開。
第五步:驗證是否安裝成功,打開cmd窗口,輸入mvn –v
1.3 Maven的配置
Maven有兩個settings.xml配置文件,一個是全局配置文件,一個是用戶配置文件。
1.3.1 全局配置(默認)
%MAVEN_HOME%/conf/settings.xml是maven全局的配置文件。
該配置文件中配置了本地倉庫的路徑,默認就是:~/.m2/repository。其中~表示當前用戶路徑C:Users[UserName]。
localRepository:用戶倉庫,用於檢索依賴包路徑
1.3.2 用戶配置
~/.m2/settings.xml是用戶的配置文件(默認沒有該文件,須要將全局配置文件拷貝過來在進行修改)
注意:通常本地倉庫的地址不使用默認配置,一般狀況下須要在用戶配置中,配置新的倉庫地址。
配置步驟以下:
第一步:建立一個本地倉庫目錄,好比E:08-repo0707repository。
第二步:複製maven的全局配置文件到~/.m2目錄下,即建立用戶配置文件
第三步:修改maven的用戶配置文件。
注意:
用戶級別的倉庫在全局配置中一旦設置,全局配置將再也不生效,轉用用戶所設置的倉庫,不然使用全局配置文件中的默認路徑倉庫。
1 建立Maven工程1.1 Maven的工程結構
1.2 Maven的工程建立1.2.1 第一步:根據maven的目錄結構建立helloMaven工程
target目錄會在編譯以後自動建立。
1.2.2 第二步:建立HelloWorld.java
在src/main/java/cn/itcast/maven目錄下新建文件Hello.java
package cn.itcast.maven; public class HelloWorld { public String sayHello(String name){ return "Hello World :" + name + "!"; } } |
1.2.3 第三步:建立TestHelloWorld.java
package cn.itcast.maven; import org.junit.Test; import static junit.framework.Assert.*; public class TestHelloWorld{ @Test public void testSayHello(){ HelloWorld hw = new HelloWorld(); String result = hw.sayHello("zhangsan"); assertEquals("hello zhangsan",result); } } |
1.2.4 第四步:配置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"> <!-- 版本:4.0.0 --> <modelVersion>4.0.0</modelVersion> <!-- 組織名稱:暫時使用 組織名稱+項目名稱 做爲組織名稱 --> <!-- 組織名稱:實際名稱 按照訪問路徑規範設置,一般以功能做爲名稱:eg: junit spring --> <groupId>cn.itcast.maven</groupId> <!-- 項目名稱 --> <artifactId>HelloWorld</artifactId> <!-- 當前項目版本號:同一個項目開發過程當中能夠發佈多個版本,此處標示0.0.1版 --> <!-- 當前項目版本號:每一個工程發佈後能夠發佈多個版本,依賴時調取不一樣的版本,使用不一樣的版本號 --> <version>0.0.1</version> <!-- 名稱:可省略 --> <name>Hello</name> <!-- 依賴關係 --> <dependencies> <!-- 依賴設置 --> <dependency> <!-- 依賴組織名稱 --> <groupId>junit</groupId> <!-- 依賴項目名稱 --> <artifactId>junit</artifactId> <!-- 依賴版本名稱 --> <version>4.9</version> <!-- 依賴範圍:test包下依賴該設置 --> <scope>test</scope> </dependency> </dependencies> </project> |
到此maven工程即建立成功。
1.3 Maven的命令
須要在pom.xml所在目錄中執行如下命令。
1.3.1 Mvn compile
執行mvn compile命令,完成編譯操做
執行完畢後,會生成target目錄,該目錄中存放了編譯後的字節碼文件。
1.3.2 Mvn clean
執行mvn clean命令
執行完畢後,會將target目錄刪除。
1.3.3 Mvn test
執行mvn test命令,完成單元測試操做
執行完畢後,會在target目錄中生成三個文件夾:surefire、surefire-reports(測試報告)、test-classes(測試的字節碼文件)
1.3.4 Mvnpackage
執行mvn package命令,完成打包操做
執行完畢後,會在target目錄中生成一個文件,該文件多是jar、war
1.3.5 Mvn install
執行mvn install命令,完成將打好的jar包安裝到本地倉庫的操做
執行完畢後,會在本地倉庫中出現安裝後的jar包,方便其餘工程引用
1.3.6 mvn clean compile命令
cmd 中錄入 mvn clean compile命令
組合指令,先執行clean,再執行compile,一般應用於上線前執行,清除測試類
1.3.7 mvn clean test命令
cmd 中錄入 mvn clean test命令
組合指令,先執行clean,再執行test,一般應用於測試環節
1.3.8 mvn clean package命令
cmd 中錄入 mvn clean package命令
組合指令,先執行clean,再執行package,將項目打包,一般應用於發佈前
執行過程:
清理————清空環境
編譯————編譯源碼
測試————測試源碼
打包————將編譯的非測試類打包
1.3.9 mvn clean install命令
cmd 中錄入 mvn clean install 查看倉庫,當前項目被髮布到倉庫中
組合指令,先執行clean,再執行install,將項目打包,一般應用於發佈前
執行過程:
清理————清空環境
編譯————編譯源碼
測試————測試源碼
打包————將編譯的非測試類打包
部署————將打好的包發佈到資源倉庫中
1 M2Eclipse
M2Eclipse是eclipse中的maven插件
1.1 安裝配置M2Eclipse插件1.1.1 第一步:將如下包中的插件進行復制。
1.1.2 第二步:粘貼到eclipse中的dropins目錄中
1.1.3 第三步:查看eclipse中是否有maven插件
1.1.4 第四步:設置maven安裝目錄
1.1.5 第五步:設置用戶配置
1.2 建立maven工程1.2.1 經過骨架建立maven工程1.2.1.1 建立工程
第一步:選擇new→maven→Maven Project
第二步:next
第三步:next
選擇maven的工程骨架,這裏咱們選擇quickstart。
第四步:next
輸入GroupId、ArtifactId、Version、Package信息點擊finish完成。
1.2.1.2 建立MavenFirst.java
在src/main/java中建立cn.itcast.maven包,而後建立MavenFirst.java
packagecn.itcast.maven; publicclassMavenFirst { publicString sayHello(String name) { return"hello "+ name; } } |
1.2.1.3 建立TestMavenFirst.java
在src/test/java中建立cn.itcast.maven包,而後建立TestMavenFirst.java
packagecn.itcast.maven; importorg.junit.Assert; importorg.junit.Test; publicclassTestMavenFirst { @Test publicvoidtestSayHello() { MavenFirst first = newMavenFirst(); String result = first.sayHello("zhangsan"); Assert.assertEquals("hello zhangsan", result); } } |
1.2.1.4 執行maven命令進行測試
在Eclipse的maven插件中執行maven命令,須要在maven工程或者pom.xml文件上點擊右鍵,選擇Run as→maven build..
能夠在菜單中看到maven經常使用的命令已經以菜單的形式出現。
例如:
Maven clean
Maven install
Maven package
Maven test
Maven build和maven build... 並非maven的命令。
maven build...只是提供一個命令輸入功能,能夠在此功能中輸入自定義的maven命令。
maven build的功能就是執行上次自定義命令。
1.2.2 不經過骨架建立maven工程
經過選擇骨架建立maven工程,每次選擇骨架時都須要聯網下載,若是網絡不通或者較慢的狀況下會有很長時間的等待。使用非常不方便,因此建立工程時能夠不選擇骨架直接建立工程。
1.2.2.1 建立工程
第一步:選擇new→maven→Maven Project
第二步:next
第三步:next
Packaging:指定打包方式,默認爲jar。選項有:jar、war、pom。
第四步:點擊finish,完成maven工程建立。
1.2.2.2 修改pom文件
在Maven-second工程中依賴使用maven-first工程的代碼
<projectxmlns="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>cn.itcast.maven</groupId> <artifactId>maven-second</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>maven-first</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project> |
1.2.2.3 建立MavenSecond.java
packagecn.itcast.maven; publicclassMavenSecond { publicString sayHello(String name) { MavenFirst first = newMavenFirst(); returnfirst.sayHello(name) + ":second"; } } |
1.2.2.4 建立TestMavenSecond.java
packagecn.itcast.maven; importorg.junit.Assert; importorg.junit.Test; publicclassTestMavenSecond { @Test publicvoidtestSayHello() { MavenSecond second = newMavenSecond(); Stringresult = second.sayHello("zhangsan"); Assert.assertEquals("hello zhangsan:second", result); } } |
1.2.2.5 測試工程
若是maven-first工程沒有安裝則會出現如下錯誤:
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building maven-second 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [WARNING] The POM for cn.itcast:maven-first:jar:0.0.1-SNAPSHOT is missing, no dependency information available [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.218s [INFO] Finished at: Fri Sep 25 15:06:00 CST 2015 [INFO] Final Memory: 4M/15M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal on project maven-second: Could not resolve dependencies for project cn.itcast:maven-second:jar:0.0.1-SNAPSHOT:Could not find artifact cn.itcast:maven-first:jar:0.0.1-SNAPSHOT-> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1]http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException |
提示找不到maven-first的jar包。當系統運行時是從本地倉庫中找依賴的jar包的,因此必須先將maven-first安裝才能正常運行,須要在maven-first工程上運行 mvn install命令安裝到本地倉庫。
1 Maven核心概念1.1 座標1.1.1 什麼是座標?
在平面幾何中座標(x,y)能夠標識平面中惟一的一點。在maven中座標就是爲了定位一個惟一肯定的jar包。
Maven世界擁有大量構建,咱們須要找一個用來惟一標識一個構建的統一規範
擁有了統一規範,就能夠把查找工做交給機器
1.1.2 Maven座標主要組成
groupId:定義當前Maven組織名稱
artifactId:定義實際項目名稱
version:定義當前項目的當前版本
1.2 依賴管理
就是對項目中jar 包的管理。能夠在pom文件中定義jar包的GAV座標,管理依賴。
依賴聲明主要包含以下元素:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> |
1.2.1 依賴範圍
其中依賴範圍scope 用來控制依賴和編譯,測試,運行的classpath的關係. 主要的是三種依賴關係以下:
1.compile: 默認編譯依賴範圍。對於編譯,測試,運行三種classpath都有效
2.test:測試依賴範圍。只對於測試classpath有效 junit
3.provided:已提供依賴範圍。對於編譯,測試的classpath都有效,但對於運行無效。由於由容器已經提供,例如servlet-api
4.runtime:運行時提供。例如:jdbc驅動
1.2.2 依賴傳遞1.2.2.1 直接依賴和間接依賴
若是B中使用A,C中使用B,則稱B是C的直接依賴,而稱A是C的間接依賴。
C->BB->A
C直接依賴B
C間接依賴A
1.2.2.2 依賴範圍對傳遞依賴的影響
左邊第一列表示第一直接依賴範圍
上面第一行表示第二直接依賴範圍
中間的交叉單元格表示傳遞性依賴範圍。
總結:
當第二依賴的範圍是compile的時候,傳遞性依賴的範圍與第一直接依賴的範圍一致。
當第二直接依賴的範圍是test的時候,依賴不會得以傳遞。
當第二依賴的範圍是provided的時候,只傳遞第一直接依賴範圍也爲provided的依賴,且傳遞性依賴的範圍一樣爲 provided;
當第二直接依賴的範圍是runtime的時候,傳遞性依賴的範圍與第一直接依賴的範圍一致,但compile例外,此時傳遞的依賴範圍爲runtime;
1.2.3 依賴衝突
若是直接與間接依賴中包含有同一個座標不一樣版本的資源依賴,以直接依賴的版本爲準(就近原則)
一、Maven-first工程中依賴log4j-1.2.8版本
那麼maven-third中依賴的就是log4j-1.2.8
二、maven-second工程中依賴log4j-1.2.9版本
那麼maven-third中依賴的就是log4j-1.2.9,由於它直接依賴的maven-second項目中依賴的就是1.2.9版本
若是直接依賴中包含有同一個座標不一樣版本的資源依賴,以配置順序下方的版本爲準(就近原則)
Maven-second中依賴log4j-1.2.9和log4j-1.2.14
此時log4j-1.2.14版本生效。
1.2.4 可選依賴
<optional> true/false 是否可選,也能夠理解爲是否向下傳遞。
在依賴中添加optional選項決定此依賴是否向下傳遞,若是是true則不傳遞,若是是false就傳遞,默認爲false。
1.2.5 排除依賴
<exclusions> <exclusion> <groupId>cn.itcast.maven</groupId> <artifactId>maven-first</artifactId> </exclusion> </exclusions> |
排除依賴包中所包含的依賴關係,不須要添加版本號。
若是在本次依賴中有一些多餘的jar包也被傳遞依賴過來,若是想把這些jar包排除的話能夠配置exclusions進行排除。
1.3 生命週期1.3.1 什麼是生命週期?
Maven生命週期就是爲了對全部的構建過程進行抽象和統一。包括項目清理、初始化、編譯、打包、測試、部署等幾乎全部構建步驟。
生命週期能夠理解爲構建工程的步驟。
在Maven中有三套相互獨立的生命週期,請注意這裏說的是「三套」,並且「相互獨立」,這三套生命週期分別是:
Clean Lifecycle: 在進行真正的構建以前進行一些清理工做。
Default Lifecycle: 構建的核心部分,編譯,測試,打包,部署等等。
Site Lifecycle: 生成項目報告,站點,發佈站點。
再次強調一下它們是相互獨立的,你能夠僅僅調用clean來清理工做目錄,僅僅調用site來生成站點。固然你也能夠直接運行 mvn clean install site 運行全部這三套生命週期。
1.3.2 Maven三大生命週期1.3.2.1 clean:清理項目
每套生命週期都由一組階段(Phase)組成,咱們平時在命令行輸入的命令總會對應於一個特定的階段。好比,運行mvn clean ,這個的clean是Clean生命週期的一個階段。有Clean生命週期,也有clean階段。Clean生命週期一共包含了三個階段:
pre-clean 執行一些須要在clean以前完成的工做
clean 移除全部上一次構建生成的文件
post-clean 執行一些須要在clean以後馬上完成的工做
mvn clean 中的clean就是上面的clean,在一個生命週期中,運行某個階段的時候,它以前的全部階段都會被運行,也就是說,mvn clean 等同於 mvn pre-clean clean ,若是咱們運行 mvn post-clean ,那麼 pre-clean,clean 都會被運行。這是Maven很重要的一個規則,能夠大大簡化命令行的輸入。
1.3.2.2 default:構建項目
Default生命週期是Maven生命週期中最重要的一個,絕大部分工做都發生在這個生命週期中。這裏,只解釋一些比較重要和經常使用的階段:
validate
generate-sources
process-sources
generate-resources
process-resources 複製並處理資源文件,至目標目錄,準備打包。
compile 編譯項目的源代碼。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 複製並處理資源文件,至目標測試目錄。
test-compile 編譯測試源代碼。
process-test-classes
test 使用合適的單元測試框架運行測試。這些測試代碼不會被打包或部署。
prepare-package
package 接受編譯好的代碼,打包成可發佈的格式,如JAR 。
pre-integration-test
integration-test
post-integration-test
verify
install 將包安裝至本地倉庫,以讓其它項目依賴。
deploy 將最終的包複製到遠程的倉庫,以讓其它開發人員與項目共享。
運行任何一個階段的時候,它前面的全部階段都會被運行,這也就是爲何咱們運行mvn install 的時候,代碼會被編譯,測試,打包。此外,Maven的插件機制是徹底依賴Maven的生命週期的,所以理解生命週期相當重要。
1.3.2.3 site:生成項目站點
Site生命週期
pre-site 執行一些須要在生成站點文檔以前完成的工做
site 生成項目的站點文檔
post-site 執行一些須要在生成站點文檔以後完成的工做,而且爲部署作準備
site-deploy 將生成的站點文檔部署到特定的服務器上
這裏常常用到的是site階段和site-deploy階段,用以生成和發佈Maven站點,這但是Maven至關強大的功能,Manager比較喜歡,文檔及統計數據自動生成,很好看。
1.4 Maven插件
Maven的核心僅僅定義了抽象的生命週期,具體的任務都是交由插件完成的。每一個插件都能實現一個功能,每一個功能就是一個插件目標。Maven的生命週期與插件目標相互綁定,以完成某個具體的構建任務。
例如compile就是插件maven-compiler-plugin的一個插件目標
1.4.1 Maven編譯插件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> |
修改配置文件後,在工程上點擊右鍵選擇maven→update project configration
1.4.2 Tomcat插件1.4.2.1 使用maven建立一個web工程
第一步:不選用骨架
第二步:將打包方式選擇爲war
第三步:點擊finish,工程建立成功。
第四步:在工程中添加web.xml
Web.xml內容以下:
<?xmlversion="1.0"encoding="UTF-8"?> <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"version="2.5"> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app> |
第五步:在webapp下建立index.jsp
1.4.2.2 運行tomcat插件
tomcat:run 運行tomcat6(默認)
tomcat7:run運行tomcat7(推薦,可是須要添加插件)
<plugin> <!-- 配置插件 --> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> |
1.5 繼承
繼承是爲了消除重複,能夠把不少相同的配置提取出來。例如:grouptId,version等
1.5.1 建立父工程
1.5.2 建立子工程
建立方式有兩種:
一種是建立新工程爲子工程,在建立時設置父工程的GAV。
一種是修改原有的工程爲子工程,在子工程的pom.xml文件中手動添加父工程的GAV。
現有工程繼承父工程只須要在pom文件中添加parent節點便可。
1.5.3 父工程統一依賴jar包
在父工程中對jar包進行依賴,在子工程中都會繼承此依賴。
1.5.4 父工程統一管理版本號
Maven使用dependencyManagement管理依賴的版本號。
注意:此處只是定義依賴jar包的版本號,並不實際依賴。若是子工程中須要依賴jar包還須要添加dependency節點。
父工程:
子工程:
1.5.5 父工程中版本號提取
當父工程中定義的jar包愈來愈多,找起來愈來愈麻煩,因此能夠把版本號提取成一個屬性集中管理。
子工程的jar包版本不受影響:
1.6 聚合
聚合通常是一個工程拆分紅多個模塊開發,每一個模塊是一個獨立的工程,可是要是運行時必須把全部模塊聚合到一塊兒纔是一個完整的工程,此時可使用maven的聚合工程。
例如電商項目中,包括商品模塊、訂單模塊、用戶模塊等。就能夠對不一樣的模塊單首創建工程,最終在打包時,將不一樣的模塊聚合到一塊兒。
例如同一個項目中的表現層、業務層、持久層,也能夠分層建立不一樣的工程,最後打包運行時,再聚合到一塊兒。
1.6.1 建立一個聚合工程
聚合工程的打包方式必須是pom,通常聚合工程和父工程合併爲一個工程。
1.6.2 建立持久層工程
第一步:在maven-web工程上,點擊new –>project
第二步:next
1.6.3 建立業務層工程
與持久層工程建立同樣
1.6.4 建立表現層工程
點擊next,進行下面的頁面
在maven-controller中添加web.xml和index.jsp
聚合以後的maven-web工程的pom文件內容以下:
1.6.5 運行maven-web聚合工程
Tomcat7:run
注意:運行以前,須要將maven-parent工程安裝到本地倉庫中。
1 Maven倉庫管理1.1 什麼是Maven倉庫?
用來統一存儲全部Maven共享構建的位置就是倉庫。根據Maven座標定義每一個構建在倉庫中惟一存儲路徑大體爲:groupId/artifactId/version/artifactId-version.packaging
1.2 倉庫的分類
一、本地倉庫
~/.m2/repository
每一個用戶只有一個本地倉庫
二、遠程倉庫
中央倉庫:Maven默認的遠程倉庫,不包含版權資源
http://repo1.maven.org/maven2
私服:是一種特殊的遠程倉庫,它是架設在局域網內的倉庫
1.3 Maven私服1.3.1 安裝Nexus
爲全部來自中央倉庫的構建安裝提供本地緩存。
下載網站:http://nexus.sonatype.org/
安裝版本:nexus-2.7.0-06.war
第一步:將下載的nexus的war包複製到tomcat下的webapps目錄。
第二步:啓動tomcat。nexus將在c盤建立sonatype-work目錄【C:Users當前用戶sonatype-worknexus】。
1.3.1.1 Nexus的目錄結構目錄結構以下:
Indexer 索引目錄結構:
Storage存儲目錄結構:
1.3.2 訪問Nexus
訪問URL: http://localhost:8080/nexus-2.7.0-06/
默認帳號:
用戶名:admin
密碼:admin123
1.3.3 Nexus的倉庫和倉庫組
倉庫有4種類型 :
group(倉庫組):一組倉庫的集合
hosted(宿主):配置第三方倉庫 (包括公司內部私服 )
proxy(代理):私服會對中央倉庫進行代理,用戶鏈接私服,私服自動去中央倉庫下載jar包或者插件
virtual(虛擬):兼容Maven1 版本的jar或者插件
Nexus的倉庫和倉庫組介紹:
3rd party: 一個策略爲Release的宿主類型倉庫,用來部署沒法從公共倉庫得到的第三方發佈版本構建
Apache Snapshots: 一個策略爲Snapshot的代理倉庫,用來代理Apache Maven倉庫的快照版本構建
Central: 代理Maven中央倉庫
Central M1 shadow: 代理Maven1 版本 中央倉庫
Codehaus Snapshots: 一個策略爲Snapshot的代理倉庫,用來代理Codehaus Maven倉庫的快照版本構件
Releases: 一個策略爲Release的宿主類型倉庫,用來部署組織內部的發佈版本構件
Snapshots:一個策略爲Snapshot的宿主類型倉庫,用來部署組織內部的快照版本構件
Public Repositories:該倉庫組將上述全部策略爲Release的倉庫聚合並經過一致的地址提供服務
1.3.4 配置全部構建均從私服下載
在本地倉庫的setting.xml中配置以下:
<mirrors> <mirror> <!--此處配置全部的構建均從私有倉庫中下載 *表明全部,也能夠寫central --> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8080/nexus-2.7.0-06/content/groups/public/</url> </mirror> </mirrors> |
1.3.5 部署構建到Nexus1.3.5.1 第一步:Nexus的訪問權限控制
在本地倉庫的setting.xml中配置以下:
<server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server> |
1.3.5.2 第二步:配置pom文件
在須要構建的項目中修改pom文件
<distributionManagement> <repository> <id>releases</id> <name>Internal Releases</name> <url>http://localhost:8080/nexus-2.7.0-06/content/repositories/releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <name>Internal Snapshots</name> <url>http://localhost:8080/nexus-2.7.0-06/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> |
1.3.5.3 第三步:執行maven的deploy命令