使用nexus搭建局域網私服
一. 認識mav倉庫
1.1 maven倉庫的作用
回想之前不用maven的時候,我們用eclipse原始的項目骨架構建項目時,在工程目錄下往往有一個lib文件夾用來存放工程所需jar文件,每次建一個新工程時都會有這樣一個lib文件夾。然后將jar復制進lib文件夾配置路徑,很顯然有大量的重復工作,而且不同項目所用jar包不盡相同,需要我們慢慢去分辨。而后我們用了項目管理工具比如svn或者git,我們需要把把大量的jar文件引入代碼庫,這也不是一件很合適的事。
而maven能夠幫我們解決這些問題,maven倉庫是專門用來存放jar文件的位置(也可以用來存放項目war,zip,pom等文件)。maven倉庫中為每個jar文件分配了一個坐標,比如jstl的jar包:
<groupId>javax.servlet</groupId> 組ID <artifactId>jstl</artifactId> 構建ID ... 其余屬性后續介紹
這樣做的話,maven能很方便的進行項目依賴版本的控制。簡單說maven倉庫就是幫我們統一管理項目構件。
1.2 maven倉庫分類
項目構建的查詢路徑:首先查詢本地倉庫,未找到就會查詢中央倉庫,沒找到就會報錯。中央倉庫地址有:
- http://www.sonatype.org/nexus/ 私服nexus用
- http://mvnrepository.com/ 推薦使用
- http://repo1.maven.org/maven2
上面三個是較為常見的,也是項目中使用較多的,但是由於下載速度太慢,並且倉庫的jar文件不完整,實際企業開發需要我們搭建私服倉庫。
二. 安裝使用nexus
這里注意搭建maven私服不僅僅只有這一種工具。博主用的版本是nexus-2.12.0。
- 點擊下載,密碼: 8mel
- 下載完成后解壓即可,解壓完成到目錄nexus-2.12.0-01-bundle\nexus-2.12.0-01\bin\jsw下可以看到:
- 博主電腦是64位所以打開最后一個文件夾:
- 點擊第二個bat文件設置為windows服務,開啟nexus后訪問網址: http://localhost:8081/nexus/啟動后打開如下頁面,即代表nexus安裝並啟動成功。
三. 配置maven私服
- 點擊右上角Login登陸,初始賬號為admin,密碼是admin123 登陸成功可修改賬號密碼,自己找。
- 點擊左邊的導航Respositories。
可以看到默認有一些倉庫,倉庫類型Type或名稱的意義:
- hosted 宿主倉庫,用來發布一些第三方不允許的組件,比如oracle驅動等商業軟件的jar包
- proxy 代理遠程的倉庫,比如上面寫得三個maven遠程倉庫。如果本地不存在某些jar文件時就會到這些代理站點去下載。
- releases 內部的模塊中release模塊的發布倉庫
- snapshots 發布內部的snapshot模塊的倉庫
- 3rd party 第三方依賴的倉庫,本地上傳jar包后使用
- group 組倉庫,用來添加其他的倉庫,方便開發人員設置
開始搭建私服倉庫,值得注意的是:maven項目索引:maven項目索引就是用來方便在私服站點查找相關依賴構建的功能。所以在搭建私服之前,應該下載maven索引,10M足左右,將倉庫的索引下載選項改成true后保存;保存后可以在Adminstration下--Scheduled Tasks可以看到下載進度是running,下載完之后在左側搜索欄搜索jar包比如所有spring就會出現
- 這一步是必不可少的如果所以呢無法下載,或者下載完之后任然無法搜索,可以查看nexus的日志進行排錯(也可以在我博客下面留言,一起踩坑):
- 3.添加自己代理的遠程庫,有時候我們的項目需要引入一些特殊的jar文件,比如Jboss的某些jar包,這時候也可以在私服中代理該遠程倉庫:
點擊add后添加代理類型,依次填寫id,name和url,這樣的話,在項目中不再需要在pom.xml中配置遠程倉庫:
<repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2/</url> <releases> <updatePolicy>daily</updatePolicy><!-- never,always,interval n --> <enabled>true</enabled> <checksumPolicy>warn</checksumPolicy><!-- fail,ignore --> </releases> <snapshots> <enabled>false</enabled> </snapshots> <layout>default</layout> </repository>
4.宿主倉庫的使用,上面提到的一些特殊的商業性質相關的jar文件,比如oracle的驅動包,ojdbc.jar並不支持遠程下載,這時候可以將我們本地下載好的jar包上傳到私服。
注意GAV設置要與你pom.xml中一致,上傳后添加到Artifacts點擊上傳即可:
5.由於私服倉庫數量過多,導致配置復雜度提高,所以需要用到上述的group類型倉庫:
切記點擊刷新,刷新后點擊唯一的一個group倉庫,點擊配置Configuration就可以看到剛才我們手動添加的代理倉庫,然后將代理倉庫添加到組倉庫,這樣依賴,項目中之需要配置組倉庫的url就可以訪問多個私服倉庫。
值得注意的是:左側的倉庫列表是有序的,以前在pom.xml中配置自定義倉庫的時候都會把速度快的倉庫放在前面(因為maven是在找不到下載jar包才會去下一個倉庫下載,然后下載慢的並不會跳過)所以在左側的列表中把下載快的放在前面,直接拖動即可,下面是兩個比較快的倉庫:
<repository> <id>nexus</id> <name>local private nexus</name> 開源中國的 <url>http://maven.oschina.net/content/groups/public/</url> </repository> <repository> <id>alimaven</id> <name>aliyun maven</name> 阿里巴巴的 <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </repository>
四. 局域網使用maven私服
4.1 單個項目使用maven私服
在上述步驟完成后,即可在項目中引用私服,在pom.xml中改變默認下載倉庫url:
指定私服倉庫,我的ip是170,不要全盤復制
<repositories> <repository> <id>nexus</id> <name>nexus</name> <url>http://192.168.1.170:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
指定插件倉庫
<pluginRepositories> <pluginRepository> <id>nexus</id> <name>nexus</name> <url>http://192.168.1.170:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories>
配置好之后就可以從私服下載依賴包了。但是這種方式只能在改項目中起作用,每次配置項目都需要寫一遍,為了將懶人模式進行到底,我們還可以指定全局的私有倉庫。
4.2 全局指定私服
找到maven文件的中的setting.xml文件
改變setting.xml中的配置:
在以下是配置的
</mirrors> <mirror> <id>central</id> <mirrorOf>*</mirrorOf> <name>Central Repository</name> <url>http://192.168.1.170:8081/nexus/content/groups/public/</url> </mirror> </mirrors>
這樣一來,這台電腦上所有maven項目下載jar文件時都會先訪問局域網170的電腦的中央倉庫。
-----------------------------------windows配置私服完畢-----------------------------------
擴展:setting,xml中各標簽的意義:
1.servers(服務器)
<servers> <server> <id>server001</id> <username>my_login</username> <password>my_password</password> <privateKey>${usr.home}/.ssh/id_dsa</privateKey> <passphrase>some_passphrase</passphrase> <filePermissions>664</filePermissions> <directoryPermissions>775</directoryPermissions> <configuration></configuration> </server> </servers>
id與pom.xml中distributionManagement的id保持一致,服務器標識
username和password表示服務器認證需要的用戶民和密碼
privateKey, passphrase一組密鑰 (不常用)
filePermissions, directoryPermissions如果在部署的時候會創建一個倉庫文件或者目錄,這時候就可以使用權限(不常用)
2.mirrors(鏡像)
<mirrors> <mirror> <id>planetmirror.com</id> <name>PlanetMirror Australia</name> <url>http://downloads.planetmirror.com/pub/maven2</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
設置一個中央倉庫的鏡像,看倉庫分類,也是遠程倉庫的一種配置方式。
3.profiles(構建環境)
這個可能比較難理解,maven權威指南一書中這樣說:
Profile能讓你為一個特殊的環境自定義一個特殊的構建;
構建環境的兩個例子是產品環境和開發環境。當你在開發環境中工作時,你的系統可能被配置成訪問運行在你本機的開發數據庫實例,而在產品環境中,你的系統被配置成從產品數據庫讀取數據。Maven能讓你定義任意數量的構建環境(構建profile),這些定義可以覆蓋pom.xml中的任何配置。
簡單理解就是你可以先profile中先構件好項目運行的環境,比如預設了A環境實在開發中使用,而實際上線是B環境,那么在上線的時候我們不需要一個個修改pom.xml中的配置,只需要激活改profile即可。
4.activation(激活構建環境 )
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.5</jdk>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
<property>
<name>mavenVersion</name>
<value>2.0.3</value>
</property>
</activation>
指定profile中配置的環境在什么時候開始生效
5.activeProfiles(激活了的profile)
<activeProfiles> <activeProfile>env-test</activeProfile> </activeProfiles>
在setting.xml最后的一個標簽,表示env-test這個profile已被激活
以上單純代表博主個人看法,如有理解錯誤或者疑問請拍磚指教。
參考資料:《Maven權威指南》 ,Maven學習 (四) 使用Nexus搭建Maven私服