1. 程式人生 > >Maven、eclipse與Nexus私服配置指南

Maven、eclipse與Nexus私服配置指南

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之類的。如果不填,預設就是jarWar代表web專案。

3 測試驅動

Maven是測試驅動的開發思路,因此工程建立初期,就包含兩個資料夾,maintest。一個用於放置開發的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從外部遠端倉庫中下載依賴的jarnexus本身並不會去遠端倉庫中下載jar。原理如下如所示:


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 OSSnexus-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地址。