1.1 Maven
1.1.1 相關概念
Maven是一個軟件項目管理工具,通過它可便捷的管理項目的生命週期。即項目的jar包依賴,開發,測試,發佈打包、版本等。雖然目前的IDE工具(如eclipse)可管理開發、發佈、打包工作,但還沒有形成一套完成的體系。
Maven有以下幾個功能特點:
1、 jar包依賴
這個也許會maven最突出的特點。使用maven進行開發時,不需要上網單獨下載jar包,只需要在配置文件pom.xml中配置jar包的依賴關係,就可以自動下載jar包到我們的項目中(在聯網情況下,maven可自動從https://repo.maven.apache.org/maven2中下載所需要的jar包。如果無法聯網,可搭建基於Nexus私服的中央庫並提供jar包下載)。這樣,別人開發或者使用這個工程時,不需要來回的拷貝jar包,只需要複製這個pom.xml就可以自動的下載這些jar包。而且,我們自己下載jar包,還有可能造成版本的不一致,這樣在協同開發的過程中就有可能造成代碼運行的不一致。通過使用maven精確的匹配jar包,就不會出現這種問題了。
以下是一個項目的pom.xml中對jar包依賴的描述:
<dependencies>
<!-- spring需要的jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
<type>jar</type>
</dependency>
</dependencies>
2 項目座標
Maven通過特定的標識來定義項目名稱,這樣既可以唯一的匹配其他的jar包,也可以通過發佈,使別人能使用自己的發佈產品。這個標識就被叫做座標,長的其實很普通,就是簡單的xml而已。比如,以下爲一個web項目的項目座標描述信息(在該項目的pom.xml文件的開始位置)
<groupId>com.nci</groupId>
<artifactId>first_maven</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
各字段說明:
groupId:所述的項目名稱,由於有的項目並不是一個jar包構成的,而是由很多的jar包組成的。因此這個groupId就是整個項目的名稱。
artifactId:包的名稱。
version:版本號。
packaging:包的類型,一般都是jar,也可以是war之類的。如果不填,默認就是jar。War代表web項目。
3 測試驅動
Maven是測試驅動的開發思路,因此工程創建初期,就包含兩個文件夾,main和test。一個用於放置開發的java文件,一個用於寫test單元測試。這樣每次開發的時候,提前設計單元測試,就能幫助減少BUG。
1.1.2 安裝
1、 下載:到apache官網下載apache-maven-3.3.9-bin.zip,解壓放置到某個目錄下(如D:\run_enviroment\apache-maven-3.3.9)
2、 設置系統環境變量:
新建系統變量MAVEN_HOME= D:\run_enviroment\apache-maven-3.3.9;然後將將這個系統變量添加到系統變量path中“%MAVEN_HOME%\bin”
3、 測試:在命令行中執行mvn –version,可顯示maven的版本號
1.1.3 設置
1、設置鏡像庫地址
Maven默認的中央庫地址爲https://repo.maven.apache.org/maven2,但目前從這個地址下載jar不太穩定。因此,設置一個穩定的鏡像庫代替默認的中央庫,以便maven可以從這個鏡像庫中下載項目依賴的jar包。
在D:\run_enviroment\apache-maven-3.3.9\conf\settings.xml中設置鏡像庫的地址,如下
<mirror>
<id>central</id>
<mirrorOf>*</mirrorOf>
<name>central-mirror</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
2、設置本地資源庫位置
Maven會將當前項目需要的jar包從中央庫中下載到各個開發機的磁盤上,這稱爲Local Repository。默認的Local Repository位置爲C:\Users\用戶名\.m2\repository。但可以手動修改settings.xml文件中的相關內容來重新設置Local Repository的位置。
1.2 基於Maven在Eclispe中開發項目
1.2.1 配置eclispe使用的maven(前提是已有maven插件)
1、在eclipse中設置maven的配置文件路徑(即設置settings.xml)以及本地資源庫的位置。
1.2.2 創建maven工程
1、 直接點擊新建,在裏面可以找到Maven選項卡,點擊MavenProject創建Maven工程
2、 選擇默認的工程位置
初次使用時,可以勾選“create asimple project(skip archetype selection)”,這樣就比較簡單。Archetype應該是一些類似模板的東西,選擇不同的模板後,maven就會創建基礎的東西,方便開發。
3、 填寫相關的groupIdartifactId version等信息。
Packaging類型設置爲war時,將建立web項目。Packaging的默認值爲jar,代表創建的項目爲javaproject。
點擊完成就創建好了一個簡單的mavenweb工程。目錄結構如下:
pom.xml:用於定義或者添加jar包的依賴
src/main/java:用於存放java源文件
src/main/resource:存放java類使用的資源文件
src/main/webapp:存放頁面文件(類似於創建DynamicWeb Project時生成的web content文件件)
src/test:用於存放測試用例。
target:生成對應的class文件或發佈的jar包。
4、 創建web項目需要的文件夾、文件
在第3步中生成的webproject上有x,是因爲缺少web.xml文件。因此,可以從別的項目中複製web-inf/web.xml文件夾及文獻到webapp文件夾下,形成下面的目錄結構。
到此爲止,一個使用maven創建的web項目就成功了。編譯的結果在target中的war包。
1.2.3 項目的maven屬性
1、 設置java編譯器版本
2、 添加依賴的jar包
在項目的pom.xml中添加當前項目依賴的jar包,然後執行maven->update project則可從中央庫中下載所需要的jar包到本地庫。
<dependencies>
<!-- spring需要的jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
<type>jar</type>
</dependency>
</dependencies>
1.3 Nexus私服
1.3.1 概念
1、功能、原理及結構
在使用maven進行開發時,依賴的jar包是從中央庫中下載,而中央庫都是在互聯網上部署的。而有的企業是不開放互聯網訪問的。因此,需要在內網部署一套類似中央庫的系統,這個系統一方面可以從互聯網上部署的中央庫下載jar包,一方面又可以爲內網的本地maven提供jar包下載。這個東西就被稱爲“私服”。
私服是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。有了私服之後,當 Maven需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠程倉庫,將構件下載到私服,再提供給本地倉庫下載(也就是說,是開發機上的maven請求jar下載時,纔會觸發nexus從外部遠程倉庫中下載依賴的jar,nexus本身並不會去遠程倉庫中下載jar)。原理如下如所示:
常用的私服有:Apache Archiva,Artifactory,Sonatype Nexus。這裏我們使用 Sonatype Nexus。
2、倉庫類型:點擊左側 Repositories鏈接,查看 Nexus內置的倉庫:
Nexus 的倉庫分爲這麼幾類(type字段):
· hosted 宿主倉庫:主要用於部署無法從公共倉庫獲取的構件(如 oracle 的 JDBC 驅動)以及自己或第三方的項目構件。nexus內置了三個host庫。
3rd party:第三方庫,如mysql 的jdbc驅動jar
Release:自己開發的release版本的jar
Snapshots:自己開發的snapshot版本的jar(可理解爲測試版本)
· proxy 代理倉庫:代理公共的遠程倉庫;
· virtual 虛擬倉庫:用於適配 Maven 1;
· group 倉庫組:Nexus 通過倉庫組的概念統一管理多個倉庫,這樣我們在項目中直接請求倉庫組即可請求到倉庫組管理的多個倉庫。Nexus內置了一個group倉庫組“public repositories”,這個倉庫組包含了4個倉庫。
1.3.2 安裝及配置
1、 下載開源版本的Nexus OSS,nexus-2.11.3-01.zip。這個版本自帶了jetty作爲應用服務器。
2、 解壓放置都某個目錄下,這裏目錄爲D:\run_enviroment
3、 生成window服務:進入
D:\run_enviroment\nexus-2.11.3-01\bin\jsw\windows-x86-64,
點擊“install-nexus.bat”,將nexus註冊爲windows service。
4、 在window中啓動nexus,然後在瀏覽中訪問:localhost:8081/nexus,賬號密碼爲admin/admin123
5、 配置中央庫:
設置Remote Storage Location=http://repo1.maven.org/maven2/;默認的https方式出現異常,應該是證書的問題,所以修改爲http方式。
Download Remote Indexes=true,這樣就能在“ArtifactSearch”中進行檢索了。
1.3.3 添加第三方jar到3rdrepository
1.3.4 使maven使用nexus私服
在每臺開發機上的maven配置文件settings.xml中添加mirror,如下圖所示。
設置mirroof=*,則maven的所有請求都早當前mirror
url即爲已配置好的nexus的group repositiores地址。