使用傳統的web項目開發的crm大小
html
一樣的項目使用maven,它的大小
java
小結: 一樣的項目使用maven工程來實現,它的項目源碼很小,能夠初步推斷它裏面必定沒有jar 包,繼續思考,沒有jar包的項目怎麼可能運行呢?程序員
分析jar包查找的過程
web
就是對jar 包管理的過程,管理的過程參考上面的圖分析過程spring
(編譯-----測試----- 運行 --打包--------------安裝 )apache
什麼是構建?api
指的是項目從編譯-----測試----- 運行 --打包--------------安裝整個過程都交給maven進行管理,這個過程稱爲構建服務器
下載以後,放的位置網絡
解壓它,獲得一個以下的目錄結構:app
電腦上需安裝java環境,安裝JDK1.7 + 版本 (將JAVA_HOME/bin 配置環境變量path )
配置 MAVEN_HOME ,變量值就是你的maven安裝 的路徑(bin目錄以前一級目錄)
將 %MAVEN_HOME%/bin 加入環境變量 path
經過 mvn -v命令檢查 maven是否安裝成功,看到maven的版本爲3.3.9及java版本爲1.7即爲安裝成功。
2.1倉庫的分類
2.2本地倉庫的配置
這個配置文件:maven安裝路徑下\conf\settings.xml文件中
Maven目錄結構的規範
compile是maven工程的編譯命令,做用是將src/main/java下的文件編譯爲class文件輸出到target目錄下。
cmd進入命令狀態,執行mvn compile,以下圖提示成功:
查看 target目錄,class文件已生成,編譯完成。
test是maven工程的測試命令,會執行src/test/java下的單元測試類。
cmd執行mvn test執行src/test/java下單元測試類,下圖爲測試結果,運行1個測試用例,所有成功。
clean是maven工程的清理命令,執行 clean會刪除target目錄的內容。
package是maven工程的打包命令,對於java工程執行package打成jar包,對於web工程打成war包。
install是maven工程的安裝命令,執行install將maven打成jar包或war包發佈到本地倉庫。
從運行結果中,能夠看出:
當後面的命令執行時,前面的操做過程也都會自動執行,
由於使用的eclipse版本比較高,因此它自帶了有maven插件。
點擊」Add」,進入下面的頁面
Window—show view ------other----------maven Repositories
直接打開helloworld工程的pom.xml文件,再添加座標
添加後自動生成的結果以下:
添加jar包的座標時,還能夠指定這個jar包未來的做用範圍
1.什麼是maven?
它是一個軟件開發的管理工具,主要管理的工做是:依賴管理,項目構建
2.使用maven的好處?
可以集中管理jar包,提供一鍵構建
3.maven的安裝及配置
配置:MAVEN_HOME,PATH路徑配置
本地倉庫:
運行:mvn -v
4.經常使用的maven命令
Compile,test,package,install,deploy
5.maven工程是具備必定的目錄結構
src main java(程序主要代碼) resources(配置文件) webapps test java(測試代碼) resources(測試的配置文件) pom.xml
6.eclipse工具下的maven工程開發
7.在pom.xml文件中如何引入座標
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>
8.總結
一個完整的早期開發好的crm項目,如今要使用maven工程對它進行拆分,這時候就能夠將dao拆解出來造成表現獨立的工程,一樣service,action也都這樣拆分
工程拆分以後,未來還要聚合(聚合就是將拆分的工程進一步組合在一塊兒,又造成一個完整的項目)
爲了達到聚合的目標,因此今天會引入
開發步驟:
點下一步:
建立後的父工程以下:
從它的目錄結構能夠看出,父工程自己不寫代碼,它裏面有一個pom.xml文件,這個文件能夠將多個子模塊中通用的jar所對應的座標,集中在父工程中配置,未來的子模塊就能夠不須要在pom.xml中配置通用jar的座標了
點next,進入以下圖:
點next,進入以下圖:
而且內部所包含的結點,其實就是父工程的座標
座標=groupId+artifactId+version
(組織名 項目名 版本)
在父工程中引入了struts-core,hibernate-core,就發現jar包是有衝突的
Javassist存在版本上衝突問題
進入下圖:
背後的父工程的pom.xml文件中,添加的內容
依賴調解原則:
maven自動按照下邊的原則調解:
一、第一聲明者優先原則
在pom文件定義依賴,先聲明的依賴爲準。
測試:
若是將上邊struts-spring-plugins和spring-context順序顛倒,系統將導入spring-beans-4.2.4。
分析:
因爲spring-context在前邊以spring-context依賴的spring-beans-4.2.4爲準,因此最終spring-beans-4.2.4添加到了工程中。
二、路徑近者優先原則
例如:A依賴 spirng-beans-4.2.4,A依賴B依賴 spirng-beans-3.0.5,則spring-beans-4.2.4優先被依賴在A中,由於spring-beans-4.2.4相對spirng-beans-3.0.5被A依賴的路徑最近。
測試:
在本工程中的pom中加入spirng-beans-4.2.4的依賴,根據路徑近者優先原則,系統將導入spirng-beans-4.2.4:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4.RELEASE</version> </dependency>
首先父工程中pom.xml文件添加:
在使用座標時,對於同一個框架,引入屢次時,它的版本信息就會屢次出現,因此
能夠借用常量的思想,將這些版本號提取出來,在須要用到的時候,直接寫版本的常量名稱就能夠了。
引用上面的常量
依賴具備傳遞性,但不是無限傳遞的,傳遞的規則以下:
解決方法:
若是在依賴傳遞過程當中,致使jar包丟失,咱們的作法很簡單,就是再導入一次座標
1.建立一個maven module項目
建立結束後,父工程中結構以下:
父工程的pom.xml文件以下
2.在service的pom.xml文件中引入dao的jar包
Web層的子模塊建立:
Nexus 是Maven倉庫管理器,經過nexus能夠搭建maven倉庫,同時nexus還提供強大的倉庫管理功能,構件搜索功能等。
下載Nexus, 下載地址:http://www.sonatype.org/nexus/archived/
下載:nexus-2.12.0-01-bundle.zip
安裝 :
1.解壓,進入指定的目錄
2.安裝並啓動這個應用程序
cmd進入bin目錄,執行nexus.bat install
安裝成功在服務中查看有nexus服務:
cmd進入nexus的bin目錄,執行:nexus.bat uninstall
查看window服務列表nexus已被刪除。
方法1:
cmd進入bin目錄,執行nexus.bat start
方法2:
直接啓動nexus服務
查看nexus的配置文件conf/nexus.properties
# Jetty section application-port=8081 # nexus的訪問端口配置 application-host=0.0.0.0 # nexus主機監聽配置(不用修改) nexus-webapp=${bundleBasedir}/nexus # nexus工程目錄 nexus-webapp-context-path=/nexus # nexus的web訪問路徑 # Nexus section nexus-work=${bundleBasedir}/../sonatype-work/nexus # nexus倉庫目錄 runtime=${bundleBasedir}/nexus/WEB-INF # nexus運行程序目錄
訪問:
http://localhost:8081/nexus/
使用Nexus 內置帳戶admin/admin123登錄:
點擊右上角的Log in,輸入帳號和密碼 登錄
登錄成功:
nexus的倉庫有4種類型:
hosted,宿主倉庫,部署本身的jar到這個類型的倉庫,包括releases和snapshot兩部分,Releases公司內部發布版本倉庫、 Snapshots 公司內部測試版本倉庫
proxy,代理倉庫,用於代理遠程的公共倉庫,如maven中央倉庫,用戶鏈接私服,私服自動去中央倉庫下載jar包或者插件。
group,倉庫組,用來合併多個hosted/proxy倉庫,一般咱們配置本身的maven鏈接倉庫組。
virtual(虛擬):兼容Maven1 版本的jar或者插件
nexus倉庫默認在sonatype-work目錄中:
存儲snapshots構件,代理地址https://repository.apache.org/snapshots/
central-m1:virtual類型倉庫,兼容Maven1 版本的jar或者插件
releases:本地倉庫,存儲releases構件。
snapshots:本地倉庫,存儲snapshots構件。
thirdparty:第三方倉庫
public:倉庫組
需求 :將ssh_dao的這個工程打成jar包,並放入到私服上去.
第一步: 須要在客戶端即部署dao工程的電腦上配置 maven環境,並修改 settings.xml 文件,配置鏈接私服的用戶和密碼 。
此用戶名和密碼用於私服校驗,由於私服須要知道上傳都 的帳號和密碼 是否和私服中的帳號和密碼 一致。
<server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server>
releases 鏈接發佈版本項目倉庫
snapshots 鏈接測試版本項目倉庫
第二步: 配置項目pom.xml
配置私服倉庫的地址,本公司的本身的jar包會上傳到私服的宿主倉庫,根據工程的版本號決定上傳到哪一個宿主倉庫,若是版本爲release則上傳到私服的release倉庫,若是版本爲snapshot則上傳到私服的snapshot倉庫
<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> 對應!
將項目dao工程打成jar包發佈到私服:
一、首先啓動nexus
二、對dao工程執行deploy命令
沒有配置nexus以前,若是本地倉庫沒有,去中央倉庫下載,一般在企業中會在局域網內部署一臺私服服務器,有了私服本地項目首先去本地倉庫找jar,若是沒有找到則鏈接私服從私服下載jar包,若是私服沒有jar包私服同時做爲代理服務器從中央倉庫下載jar包,這樣作的好處是一方面由私服對公司項目的依賴jar包統一管理,一方面提升下載速度,項目鏈接私服下載jar包的速度要比項目鏈接中央倉庫的速度快的多。
本例子測試從私服下載dao 工程jar包。
nexus中包括不少倉庫,hosted中存放的是企業本身發佈的jar包及第三方公司的jar包,proxy中存放的是中央倉庫的jar,爲了方便從私服下載jar包能夠將多個倉庫組成一個倉庫組,每一個工程須要鏈接私服的倉庫組下載jar包。
打開nexus配置倉庫組,以下圖:
上圖中倉庫組包括了本地倉庫、代理倉庫等。
在客戶端的setting.xml中配置私服的倉庫,因爲setting.xml中沒有repositories的配置標籤須要使用profile定義倉庫。
<profile> <!--profile的id--> <id>dev</id> <repositories> <repository> <!--倉庫id,repositories能夠配置多個倉庫,保證id不重複--> <id>nexus</id> <!--倉庫地址,即nexus倉庫組的地址--> <url>http://localhost:8081/nexus/content/groups/public/</url> <!--是否下載releases構件--> <releases> <enabled>true</enabled> </releases> <!--是否下載snapshots構件--> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <!-- 插件倉庫,maven的運行依賴插件,也須要從私服下載插件 --> <pluginRepository> <!-- 插件倉庫的id不容許重複,若是重複後邊配置會覆蓋前邊 --> <id>public</id> <name>Public Repositories</name> <url>http://localhost:8081/nexus/content/groups/public/</url> </pluginRepository> </pluginRepositories> </profile>
使用profile定義倉庫須要激活纔可生效。
<activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>
配置成功後經過eclipse查看有效pom,有效pom是maven軟件最終使用的pom內容,程序員不直接編輯有效pom,打開有效pom
有效pom內容以下:
下邊的pom內容中有兩個倉庫地址,maven會先從前邊的倉庫的找,若是找不到jar包再從下邊的找,從而就實現了從私服下載jar包。
<repositories> <repository> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> <id>public</id> <name>Public Repositories</name> <url>http://localhost:8081/nexus/content/groups/public/</url> </repository> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public</id> <name>Public Repositories</name> <url>http://localhost:8081/nexus/content/groups/public/</url> </pluginRepository> <pluginRepository> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> </pluginRepository> </pluginRepositories>
測試1:局域網環境或本地網絡便可
在service工程中添加以上配置後,添加dao工程的依賴,刪除本地倉庫中dao工程,同時在eclipse中關閉dao工程。
觀察控制檯:
Downloading http://localhost:8081/nexus/content/groups/public/cn/itcast/ssh/ssh-dao0423/0.0.1-SNAPSHOT/ssh-dao0423-0.0.1-20160702.123702-1.jar
項目先從本地倉庫找dao,找不到從私服找,因爲以前執行deploy將dao部署到私服中,因此成功從私服下載dao並在本地倉庫保存一份。
若是此時刪除私服中的dao,執行update project以後是否正常?
若是將本地倉庫的dao和私服的dao所有刪除是否正常?
測試2:須要互聯網環境 在項目的pom.xml添加一個依賴,此依賴在本地倉庫和私服都不存在,maven會先從本地倉庫找,本地倉庫沒有再從私服找,私服沒有再去中央倉庫下載,jar包下載成功在私服、本地倉庫分別存儲一份。