Maven

1. Maven——項目管理工具

項目自動構建、依賴管理項目信息管理自動生成項目站點

跨平臺

Apache 開源

 

1.1 項目自動構建:

編譯、測試、部署等工作一步到位

 

clean compile test site package deploy

1.2 依賴管理:

自動下載相關的jar包,統一依賴管理

 

1.3 項目信息管理:

項目信息、開發人員信息、開發者信息,文檔自動生成

 

 

2. 爲什麼使用Maven

IDE pk Eclipse

手工操作較多,編譯、測試、部署等工作都是獨立的,很難一步完成

每個人的IDE配置都不同,很容易出現本地代碼換個地方編譯就出錯

 

Ant

沒有一個約定的目錄結構

必須明確讓ant做什麼,什麼時候做,然後編譯,打包

沒有生命週期,必須定義目標及其實現的任務序列

沒有集成依賴管理

 

Maven

擁有約定,知道你的代碼在哪裏,放到哪裏去

擁有一個生命週期,例如執行mvn install 就可以自動執行編譯、測試、打包等構件過程

只需要定義一個pom.xml,然後把源代碼放到默認的目錄Maven幫你處理其他的事情

擁有依賴管理,倉庫管理

 

3. MAVEN安裝和配置

下載Maven

地址:http://maven.apache.org/download.html

版本:apache-maven-3.0.5

 


 

3.1 Maven安裝

1. 檢查jdk安裝的情況(1.6以上版本):

%JAVA_HOME%

Java -version

2. apache-maven-3.0.5-bin.zip進行解壓縮,例如解壓到如下目錄(解壓目錄不要有中文字,不要有空格)

D:\javaenv\apache-maven-3.0.5

3. 設置系統環境變量,MAVEN_HOME

 

4. 設置環境變量Path,將%MAVEN_HOME%\bin加入Path中,一定要注意要用分號;與其他值隔開

 

5. 驗證安裝是否成功,打開cmd窗口,敲入mvn v 查看

 

 

3.2 目錄結構 

bin目錄下

mvn.bat 處理所有的maven命令

boot目錄下

plexus-classloader-2.4.jar類加載器

conf目錄下

setting.xml文件,maven配置文件,重點接觸

 

lib目錄下

 

maven依賴的jar

 

3.3初始化配置

1JAVE_HOEM

不在系統環境變量中配置JAVA_HOME,如何運行mavn

 

修改mvn.bat文件,加入下面語句

 

@REM ==== START VALIDATION ====

if not "%JAVA_HOME%" == "" goto OkJHome

前面加上

1.使用絕對路徑

set JAVA_HOME=E:\\Program-Files\\Java\\jdk1.7.0_75

2.使用相對路徑

set JAVA_HOME=%MAVEN_HOME%\bin\..\..\jdk1.6

JDK MAVEN放在同一個目錄就可以找到JDK..\表示向上級目錄查找

 

2、MAVEN_OPTS

在使用maven時,如果報內存溢出,

如使用 mvn site會耗費大量內存,則修改默認配置

mvn.bat文件

@REM set MAVEN_OPTS=……後加入

set MAVEN_OPTS= -Xms128m -Xmx512m

 

3、setting.xml

配置用戶自己的settings.xml

MAVEN_HOME/conf/settions.xml是全局的

~/.m2/settings.xml爲用戶自己的

初始安裝文件settings.xml不存在,複製上面全局的即可

 

4、本地資源庫

本地資源庫的位置,

默認爲C:\Documents and Settings\username%\.m2\ repository

默認配置不是很合適,很不安全,重裝系統及其容易被誤刪除。

 

修改本地資源庫保存路徑爲maven安裝目錄下:

修改全局setting.xml文件,

<settings>下找到localRepository標籤,默認爲註釋掉的,在該註釋段之外添加

<localRepository>D:/javaenv/apache-maven-3.0.5/m2/repository</localRepository>注意路徑的斜槓

 

4. MAVEN約定(重點)

4.1.目錄結構-基礎約定 

target項目輸出位置,每次構建自動產生,臨時文件 =bin

src/pom.xml     Maven工程配置文件,相對於web工程中的web.xml

 

4.2早期工程如何滿足基礎約定?

 pom.xml文件配置映射關係,比如把原來在src目錄下的文件映射在src/java目錄下

 

5. 第一個MAVEN項目

5.1 首先建立Hello項目同時建立Maven約定的目錄結構

5.2 Hello.java

src/main/java/cn/itcast/maven目錄下新建文件

package cn.itcast.maven;

public class Hello {

public String sayHello(String name){

return "Hello "+name+"!";

}

}

5.3 HelloTest.java

/src/test/java/cn/itcast/maven目錄下新建測試文件

package cn.itcast.maven;

import org.junit.Test;

import static junit.framework.Assert.*;

public class HelloTest {

@Test

public void testHello(){

Hello hello = new Hello();

String results = hello.sayHello("litingwei");

assertEquals("Hello litingwei!",results);

}

}

 

 

5.4 pom.xml

在項目Hello根目錄建立

 

<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">

 

   <modelVersion>4.0.0</modelVersion>

   <groupId>cn.itcast.maven</groupId>

   <artifactId>Hello</artifactId>

   <version>0.0.1-SNAPSHOT</version>

   <name>Hello</name>

  

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.9</version>

<scope>test</scope>

</dependency>

</dependencies>

</project>

 

 

5.5 注意看目錄的變化

 

注意查看目錄E:\Program-Files\maven\m2\Repository\org\apache\maven\plugins變化

 

dos進入到項目的根目錄

 

1、執行 mvn compile

自動創建target目錄,自動編譯類

2、清除 mvn clean

3、測試 mvn test  執行junit測試,並輸出報告

4、打包 mvn package 生成jar

5、安裝 mvn install 發佈到個人倉庫中

注意:如首次運行下載文件失敗,重新運行

 

 

5.6 maven解決問題:

1jar依賴

2、自動構建

 

6. 第二個Maven項目(依賴)

maven自動下載外部jar包,maven也可以依賴之前的項目,只要把之前的項目打成了一個jar包。

 

 

6.1 新建第二個項目模塊HelloFriend目錄及約定的目錄結構

6.2 在項目HelloFriend根目錄建立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">

  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.itcast.maven</groupId>

  <artifactId>HelloFriend</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <name>HelloFriend</name>

  

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.9</version>

<scope>test</scope>

</dependency>


<dependency>

<groupId>cn.itcast.maven</groupId>

<artifactId>Hello</artifactId>

<version>0.0.1-SNAPSHOT</version>

<scope>compile</scope>

</dependency>


</dependencies>

</project>

 

6.3 src/main/java/cn/itcast/maven目錄下新建文件HelloFriend.java

package cn.itcast.maven;

import cn.itcast.maven.Hello;

public class HelloFriend {

public String sayHelloToFriend(String name){

Hello hello = new Hello();

String str = hello.sayHello(name)+" I am "+this.getMyName();

System.out.println(str);

return str;

}

public String getMyName(){

return "John";

}

}

 

6.4 /src/test/java/cn/itcast/maven目錄下新建測試文件HelloFriendTest.java

package cn.itcast.maven;

import static junit.framework.Assert.assertEquals;

import org.junit.Test;

import cn.itcast.maven.Hello;

public class HelloFriendTest {

@Test

public void tesHelloFriend(){

HelloFriend helloFriend = new HelloFriend();

String results = helloFriend.sayHelloToFriend("litingwei");

assertEquals("Hello litingwei! I am John",results);

}

}

 

6.5 HelloFriend目錄下執行命令mvn package

系統報錯說沒有找到依賴

 

6.6 需要重新構建Hello第一個項目並安裝到數據倉庫,

在命令行Hello根目錄下執行mvn clean install

 

6.7 重新在HelloFriend目錄下執行命令mvn package

成功

 

7. Maven相關概念介紹

7.1核心概念

 

7.1.1項目對象模型

POMProject Object Model

7.1.2座標

pom.xml文件中的標籤意義

   <groupId>cn.itcast.maven</groupId>

   <artifactId>Hello</artifactId>

   <version>0.0.1-SNAPSHOT</version>

   <name>Hello</name>

 

Maven座標主要組成

groupId:定義當前Maven項目隸屬項目,分組【maven倉庫中項目路徑】

artifactId:定義實際項目中的一個模塊,【模塊】

version:定義當前項目的當前版本,【版本】

packaging:定義該項目的打包方式,默認jar,還可以是warjarear

 

Maven爲什麼使用座標?

Maven的大量構建,需要找一個用來唯一標識一個構建的統一規範

目的:擁有了統一規範,就可以把查找工作交給機器,默認查找jar

也就是說在其他項目中依賴它時,能找到它。

 

7.1.3 依賴管理

<dependency>

<groupId>cn.itcast.maven</groupId>

<artifactId>Hello</artifactId>

<version>0.0.1-SNAPSHOT</version>

<scope>compile</scope>默認依賴的範圍 scope(編譯,測試,打包運行)

</dependency>

還有這些範圍:

test  測試

provided 編譯,測試

runtime 打包運行

 

如何進行依賴配置?默認依賴jar包的範圍compile=都有效果

傳遞性依賴和可選依賴

 

依賴多個項目,這些項目中有相同jar包,但版本不同,那選擇哪個呢?

如何解決依賴中的版本衝突?HelloFriends引用了HelloFriend ,HelloFriend引用了Hello

傳遞性依賴

Hello中的pom.xml增加:

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.16</version>

<scope>test</scope>

</dependency>

 

HelloFriends中的pom.xml中增加

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.13</version>

<scope>test</scope>

</dependency>

 

注意引用的log4j版本不同

傳遞性依賴原則:

路徑最近者優先

路徑相同,第一聲明者優先

*最終依賴log4j1.2.13

 

 

 

 

7.1.4 倉庫管理

1. 何爲Maven倉庫?

用來統一存儲所有Maven共享構建的位置就是倉庫

Maven倉庫佈局

根據Maven座標定義每個構建在倉庫中唯一存儲路徑

大致爲:groupId/artifactId/version/artifactId-version.packaging

 

 

2. 倉庫的分類

2.1本地倉庫

~/.m2/repository/

每個用戶只有一個本地倉庫

 

2.2 遠程倉庫

中央倉庫:Maven默認的遠程倉庫http://repo1.maven.org/maven2

私服:是一種特殊的遠程倉庫,它是架設在局域網內的倉庫

鏡像:用來替代中央倉庫,速度一般比中央倉庫快

 

pom.xml文件定義項目存儲在倉庫的路徑及名稱

  <groupId>cn.itcast.maven</groupId>

  <artifactId>HelloFriend</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <name>HelloFriend</name>

 

存儲在倉庫中的項目路徑及名稱

repository\cn\itcast\maven\HelloFriend\0.0.1-SNAPSHOT\

HelloFriend-0.0.1-SNAPSHOT.jar

 

 

7.1.5 生命週期管理

所有構建步驟稱爲maven的一個生命週期

    

1. 何爲生命週期?

Maven生命週期就是爲了對所有的構建過程進行抽象和統一,包括項目清理,初始化,編譯,打包,測試,部署等幾乎所有構建步驟

 

2. 所有步驟又可以分爲三類步驟,及三個生命週期

Maven Lifecycle 三大生命週期“相互獨立”

clean:清理項目的       pre-clean cleanpost-clean

default:構建項目的【重點】編譯,打包,測試,部署

site:生成項目站點的   sitepost-sitesite-deploy

它們是相互獨立的,你可以僅僅調用clean來清理工作目錄,僅僅調用site來生成站點。

 

直接運行 mvn clean install site 運行這三套生命週期。

mvn test clean能執行嗎?能

 

2.1 Clean Lifecycle 生命週期:

pre-clean 執行一些需要在clean之前完成的工作

clean移除所有上一次構建生成的文件

post-clean 執行一些需要在clean之後立刻完成的工作

 

mvn clean 中的clean就是上面的clean,在一個生命週期中,運行某個階段的時候,它之前的所有階段都會被運行,也就是說,mvn clean 等同於 mvn pre-clean clean

如果我們運行 mvn post-clean ,那麼 pre-cleanclean 都會被運行。

 

這是Maven很重要的一個規則,可以大大簡化命令行的輸入。

 

2.2 Default Lifecycle 生命週期:

Default生命週期,絕大部分工作都發生在這個生命週期中。

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 將最終的包複製到遠程的倉庫,以讓其它開發人員與項目共享

 

 

2.3 Site Lifecycle 生命週期:

pre-site 執行一些需要在生成站點文檔之前完成的工作

site 生成項目的站點文檔

post-site 執行一些需要在生成站點文檔之後完成的工作,並且爲部署做準備

site-deploy 將生成的站點文檔部署到特定的服務器上 

 

  這裏經常用到的是site階段和site-deploy階段,用以生成和發佈Maven站點,這可是Maven相當強大的功能,Manager比較喜歡,文檔及統計數據自動生成,很好看。

執行mvn clean site  

中文亂碼問題:

pom.xml文件另存,

保存時選擇utf-8格式即可

 

Pom.xml 添加備註信息,在站點文檔呈現,站點文檔一般是網頁文件

  <!-- 公司信息 -->

  <organization>

  <name>北京傳智播客教育科技有限公司</name>

  <url>http://www.itcast.cn/</url>

  </organization>

  

  <!-- 研發人員列表 -->

  <developers>

  <developer>

  <id>weichen</id>

  <name>陳偉</name>

  <email>[email protected]</email>

  <roles>

  <role>研發經理</role>

  <role>研發工程師</role>

  </roles>

  </developer>

  </developers>

  

  <!-- 貢獻人列表 -->

  <contributors>

  <contributor>

  <name>胡瑩瑩</name>

  <email>[email protected]</email>

  <roles><role>研發工程師</role></roles>

  </contributor>

  </contributors>

 

7.1.6 插件管理

Maven的核心僅僅定義了抽象的生命週期,具體的任務都是交由插件完成的

 

每個插件都能實現多個功能,每個功能就是一個插件目標

 

Maven的生命週期與插件目標相互綁定,以完成某個具體的構建任務

例如compile就是插件maven-compiler-plugin的一個插件目標

 

mvn compile  隱含沒有顯式的指定

 

mvn 插件名:目標名

 

mvn compiler:compile      

調用maven-compiler-plugin插件的compile目標

 

7.1.7 聚合繼承

新的項目是在以前的項目基礎上進行開發,如果能直接聚合或者基礎拿來用,能省事。

何爲繼承?

繼承爲了消除重複,我們把很多相同的配置提取出來

例如:grouptIdversion

 

何爲聚合?

如果我們想一次構建多個項目模塊,那我們就需要對多個項目模塊進行聚合

<modules><module></module></modules>

 

聚合與繼承的關係

繼承主要爲了消除重複

聚合主要爲了快速構建項目

 

繼承:

1、新建工程Parent,目的消除子工程的配置文件中重複的內容,所以無需代碼類,刪除代碼。

2、子工程統一junit版本4.9

3、加入HelloHelloFriend依賴dependency

4、最後在各個子工程中引入父工程即可<parent>,放在<denpendencies>上面,同時在所有子項目中HelloHelloFriendMakeFridens中刪除重複的<groupId><version><dependency>

<parent>

   <groupId>cn.itcast.maven</groupId>

   <artifactId>Parent</artifactId>

   <version>0.0.1-SNAPSHOT</version>

   <relativePath>../Parent/pom.xml</relativePath>

</parent>

 

 

<modelVersion>4.0.0</modelVersion>

<artifactId>Hello</artifactId>

 

<parent>

<groupId>cn.itcast.maven</groupId>

<artifactId>Parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

<relativePath>../Parent/pom.xml</relativePath>

</parent>

 

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

</dependency>

</dependencies>

此時Run As  Hello工程的pom.xmlmaven install” 報錯,

Project build error: Invalid packaging for parent POM cn.itcast.maven.HelloParent:0.0.1-SNAPSHOT, must be "pom" but is "jar"

 

修改HelloParentpom.xml

<packaging>jar</packaging> 改爲 <packaging>pom</packaging>

這是一個父工程,實際是一個聚合工程,它沒有實際代碼,它的作用是抽象出子工程公用的內容,

 

 

Run As 一下 Hello工程的pom.xml

 

報錯:parent.relativePath' points at wrong local POM

注意:在Run As子工程前,一定先要對parent工程進行安裝mvn install

6、修改HelloFriendMakeFriends項目,Run As maven install”都成功。

 

但發現Hello工程依賴不對,怎麼多了HelloFriend的依賴?

 

 

 

 

 

將依賴進行管理:

 

1、在parent項目中將依賴進行管理<dependencyManagement>,此時其他項目依賴全部消失

2、再在各個項目中加入依賴,但不需加入版本和範圍,<version><scope>

這樣防止開發團隊中大家使用不同的版本,造成整合項目時,發生衝突,導致異常。

 

此時各工程依賴關係又正確了

 

 

 

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

</dependency>

</dependencies>

 

 

將依賴進行管理:

 

1、在parent項目中將依賴進行管理<dependencyManagement>,此時其他項目依賴全部消失

2、再在各個項目中加入依賴,但不需加入版本和範圍,<version><scope>

這樣防止開發團隊中大家使用不同的版本,造成整合項目時,發生衝突,導致異常。

 

此時各工程依賴關係又正確了

 

聚合:

Parent pom.xml文件中加入

 

<modules>

<module>../Hello</module>

<module>../HelloFriend</module>

<module>../MakeFriends</module>

</modules>

 

這樣就無需一個一個的安裝 mvn install

只需 HelloParent pom.xml Run As,就會連同全部一起進行安裝

 

 

 

8.MyEclipse Maven整合

8.1 配置MyEclipse

myeclipse自帶maven插件,不需要自動更新

    windows-->Preferences-->Maven4MyEclipse 

            Enable Maven4MyEclipse feature

            Do not automaticallu update dependencies

 

使用自定義的Maven插件

     Maven4MyEclipse

                    Installations

                                                                     External E://...


設置本地倉庫,選擇對應的setting.xml就會從這個xml文件中讀取本地倉庫的路徑

         Maven4MyEclipse

                   User Settings


 

8.2  創建滿足maven規約的java項目

1.新建一個maven的普通項目,右鍵新建,選other

    輸入maven 

            Maven Project

 

 

2.- archetype :骨架、框架 、模型

 maven-archetype-quickstart : 快速構建項目的骨架  ,簡單的滿足maven規範的java項目

 中央倉庫下載

8.3 創建滿足maven規約的web項目

8.3.1 第一種創建方法

1. 直接建立一webProject

        new -->webProject 

 

 2. 要選擇maven支持

myeclipse結構的web項目,

pom.xml文件會有webmaven目錄結構的映射

        Add Maven support

         MyEclipse Maven JEE Project 

8.3.2 第二種創建的方法

1. 依然是新建maven project

        New --> Other --> Maven Project 

 

2.骨架:maven-archetype-webapp

 

 

 

運行

普通


1、手工創建目錄src/main/webapp/WEB-INF/classes,並加入web.xml文件

2、新建target/classes目錄,刪除WebRoot目錄



web.xml


<!DOCTYPE web-app PUBLIC

 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

 "http://java.sun.com/dtd/web-app_2_3.dtd" >


<web-app>

  <display-name>Archetype Created Web Application</display-name>

</web-app>


3、選中工程,屬性,編輯Java Build Path/Source選項卡,編輯Output folder和Default output folder

選擇target/classes目錄

4、刪除WebRoot目錄

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/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>


<artifactId>HelloWeb</artifactId>

<packaging>war</packaging>

7、倉庫中的war出現,配置無錯,順利打包、發佈完成

      拷貝war包到tomcat/webapps下,啓動tomcat, 

      訪問:http://localhost:8090/HelloWeb-0.0.1-SNAPSHOT/

8、成功


技術要點:設置虛擬路徑,並自動啓動tomcat

在HelloWeb/pom.xml中加入build標籤。使用org.codehaus.cargo插件,設置tomcat路徑,端口   


首先在C:\Documents and Settings\settings.xml

中的<pluginGroups>中加入插件:

<pluginGroup>org.codehaus.cargo</pluginGroup> 



技術要點:設置虛擬路徑,並自動啓動tomcat

倉庫中的war出現,配置無錯,順利打包、發佈完成



<build>

<finalName>AaaWeb</finalName>

<plugins>

<plugin>

<groupId>org.codehaus.cargo</groupId>

<artifactId>cargo-maven2-plugin</artifactId>

<version>1.2.3</version>

<configuration>

<container>

<containerId>tomcat7x</containerId>

<home>E:/Program-Files/apache-tomcat-7-01</home>

</container>

<configuration>

<type>existing</type>

<home>E:/Program-Files/apache-tomcat-7-01</home>

</configuration>

</configuration>

<executions>

<execution>

<id>cargo-run</id>

<phase>install</phase>

<goals>

<goal>run</goal>

</goals>

</execution>

</executions>

</plugin>

</plugins>

</build>

    

MyEclipse中沒有停止tomcat的命令:

可以在tomcat目錄手工停止,否則下次install時,會報錯:java.net.BindException: Address already in use: JVM_Bind


D:\tomcat7\bin\

shutdown.bat




8.4 注意事項

利用之前項目裏面的jar包,把之前項目的裏面的jar依賴的範圍 scope 設置爲compile

<scope>compile</scope>

 

9、搭建Maven的私有服務器

maven中心倉庫  :面向全球的

存放jar包和war

 裏面集成了大部分優秀的開源框架的jar包和war

 - apache旗下的框架基本都發布在maven倉庫中

 - 保存框架大部分不同版本

9.1 nexus介紹  .

是開源的框架,屬於sonatype 機構的開源框架,用該框架架設maven 私有服務器

 

 網線 :外網 ip地址 (動態的  )

地址: 目前來說: http://repo1.maven.org/maven2/是真正的Maven中央倉庫的地址,該地址內置在Maven的源碼中其他的都是鏡像

索引: 中央倉庫帶有索引文件以方便用戶對其進行搜索,完整的索引文件大小約爲60M,索引每週更新一次

黑名單: 如果某個IP地址惡意的下載中央倉庫內容,例如全公司100臺機器使用同一個IP反覆下載,這個IP(甚至是IP段)會進入黑名單,因此稍有規模的使用Maven時,應該用Nexus架設私服

 

   爲什麼要搭建nexus私服,原因很簡單,有些公司都不提供外網給項目組人員,因此就不能使用maven訪問遠程的倉庫地址,所以很有必要在局域網裏找一臺有外網權限的機器,搭建nexus私服,然後開發人員連到這臺私服上,這樣的話就可以通過這臺搭建了nexus私服的電腦訪問maven的遠程倉庫


    用戶                  私服                     Maven Central

                                                   Apatche                                              

    用戶                                          其他遠程倉庫

     

9.2 nexus私服環境搭建

第一步:下載nexus-webapp-1.9.2.4.war包,然後拷貝到tomcat下的webapps目錄中

第二步:啓動tomcat 默認登錄賬戶密碼爲: admin  admin123  

第三步:訪問http://localhost:8080/項目名稱/

    

9.3 nexus 倉庫的分類   

        

Nexus倉庫的默認的地址, nexus-2.1.2\WEB-INF\plexus.properties 中定義的

Views/Repositories-->Repositories裏進行配置, nexus裏可以配置3種類型的倉庫,分別是proxyhostedgroup

proxy是遠程倉庫的代理。比如說在nexus中配置了一個central repositoryproxy,當用戶向這個proxy請求一個artifact,這個proxy就會先在本地查找,如果找不到的話,就會從遠程倉庫下載,然後返回給用戶,相當於起到一箇中轉的作用

Hosted是宿主倉庫,用戶可以把自己的一些構件,deployhosted中,也可以手工上傳構件到hosted裏。比如說oracle的驅動程序,ojdbc6.jar,在central repository是獲取不到的,就需要手工上傳到hosted

Group是倉庫組,在maven裏沒有這個概念,是nexus特有的。目的是將上述多個倉庫聚合,對用戶暴露統一的地址,這樣用戶就不需要在pom中配置多個地址,只要統一配置group的地址就可以了右邊那個Repository Path可以點擊進去,看到倉庫中artifact列表。不過要注意瀏覽器緩存。我今天就發現,明明構件已經更新了,在瀏覽器裏卻看不到,還以爲是BUG,其實是被瀏覽器緩存了

virtual也是中央倉庫鏡像,支持M1老版本

 

      - hosted :宿主倉庫 ,該倉庫屬於該公司私有的

        1. 3rd part : 第三方的jar包,但是該jar包沒有在中心倉庫保存,驅動.jar

2. snapshot :測試版本、鏡像版本  easyNet.war

3. release  : 發行版本

      - proxy  : 代理倉庫  :代理中心倉庫的jar    

      - public :倉庫組 :虛擬的概念

        可以包含其他的倉庫

 

9.4 每個倉庫的作用

3rd party: 無法從公共倉庫獲得的第三方發佈版本的構件倉庫
Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構件倉庫
Central: 用來代理maven中央倉庫中發佈版本構件的倉庫
Central M1 shadow: 用於提供中央倉庫中M1格式的發佈版本的構件鏡像倉庫
Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構件的倉庫
Releases: 用來部署管理內部的發佈版本構件的宿主類型倉庫
Snapshots:用來部署管理內部的快照版本構件的宿主類型倉庫

 

     

9.5  通過私服上傳下載jar     

pom.xml文件

定義項目下載jar包的地址和項目上傳到私服的地址

1. 下載項目所依賴的jar

   <repositories>

    <repository>

      <snapshots>

        <enabled>true</enabled> //true表示測試版本可以要

      </snapshots>

      <id>public</id>

      <name>public</name>

      <url>http://127.0.0.1:8080/nexus-2.6.2/content/groups/public/</url>

    </repository>

  </repositories>

   

2. 下載maven執行插件的jar

  <pluginRepositories>

    <pluginRepository>

      <releases>

        <updatePolicy>never</updatePolicy>

      </releases>

      <snapshots>

        <enabled>true</enabled>

      </snapshots>

     

 <id>public</id>

      <name>public</name>

      <url>http://127.0.0.1:8080/nexus-2.6.2/content/groups/public/</url>

    </pluginRepository>

  </pluginRepositories>

 

 

2. 分銷管理 ,把jar包發佈到私服中 ,上傳到私服deploy

  <distributionManagement>

  <!-- jar包發佈到 快照版本的倉庫,即 測試版本倉庫 -->

  <snapshotRepository>

  <id>snapshots</id>

  <url>http://127.0.0.1:8080/nexus-2.6.2/content/repositories/snapshots/</url>

  </snapshotRepository>

 

  <!-- 發佈到 發行版本的倉庫中,也可以發佈到3rd party 倉庫 -->

  <repository>

    <id>releases</id>

    <url>http://127.0.0.1:8080/nexus-2.6.2/content/repositories/releases/</url>

  </repository>

  

  </distributionManagement>

 

 

 

setting.xml文件

中配置使用私服那個服務器和登錄私服的賬戶密碼

 <server>

      <id>releases</id>

      <username>admin</username>

      <password>admin123</password>

    </server>

<server>

      <id>snapshots</id>

      <username>admin</username>

      <password>admin123</password>

    </server>

    

    -->

 

10. 總結

  重點:

    1. maven 特點

       - jar依賴

       - 自動構建項目

    2. maven目錄結構

    3. maven專業術語

       - 座標

       - pom.xml

    4. myeclispe中創建maven java項目   maven web項目

 

    5. 私服

      -nexus

      - 從私服中下載jar包 、 上傳jar

 <!-- 假如沒有私服 ,則 本地倉庫找不到,則訪問中心倉庫

       假如有私服 :訪問順序

         首先訪問本地倉庫

     本地倉庫沒有,則訪問私服倉庫

     私服倉庫也沒有,則訪問中心倉庫

   -->

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章