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初始化配置
1、JAVE_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解決問題:
1、jar依賴
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項目對象模型
(POM)Project 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,還可以是war、jar、ear
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 、clean、post-clean
default:構建項目的【重點】編譯,打包,測試,部署
site:生成項目站點的 site、post-site、site-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-clean,clean 都會被運行。
這是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 聚合繼承
新的項目是在以前的項目基礎上進行開發,如果能直接聚合或者基礎拿來用,能省事。
何爲繼承?
繼承爲了消除重複,我們把很多相同的配置提取出來
例如:grouptId,version等
何爲聚合?
如果我們想一次構建多個項目模塊,那我們就需要對多個項目模塊進行聚合
<modules><module>…</module></modules>
聚合與繼承的關係
繼承主要爲了消除重複
聚合主要爲了快速構建項目
繼承:
1、新建工程Parent,目的消除子工程的配置文件中重複的內容,所以無需代碼類,刪除代碼。
2、子工程統一junit版本4.9
3、加入Hello、HelloFriend依賴dependency
4、最後在各個子工程中引入父工程即可<parent>,放在<denpendencies>上面,同時在所有子項目中Hello、HelloFriend、MakeFridens中刪除重複的<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.xml“maven install” 報錯,
Project build error: Invalid packaging for parent POM cn.itcast.maven.HelloParent:0.0.1-SNAPSHOT, must be "pom" but is "jar"
修改HelloParent的pom.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、修改HelloFriend、MakeFriends項目,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文件會有web和maven目錄結構的映射
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地址 (動態的 )
l 地址: 目前來說: http://repo1.maven.org/maven2/是真正的Maven中央倉庫的地址,該地址內置在Maven的源碼中其他的都是鏡像
l 索引: 中央倉庫帶有索引文件以方便用戶對其進行搜索,完整的索引文件大小約爲60M,索引每週更新一次
l 黑名單: 如果某個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種類型的倉庫,分別是proxy、hosted、group
proxy:是遠程倉庫的代理。比如說在nexus中配置了一個central repository的proxy,當用戶向這個proxy請求一個artifact,這個proxy就會先在本地查找,如果找不到的話,就會從遠程倉庫下載,然後返回給用戶,相當於起到一箇中轉的作用
Hosted:是宿主倉庫,用戶可以把自己的一些構件,deploy到hosted中,也可以手工上傳構件到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: 無法從公共倉庫獲得的第三方發佈版本的構件倉庫 |
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包
<!-- 假如沒有私服 ,則 本地倉庫找不到,則訪問中心倉庫
假如有私服 :訪問順序
首先訪問本地倉庫
本地倉庫沒有,則訪問私服倉庫
私服倉庫也沒有,則訪問中心倉庫
-->