前面我們講過(guò)本地倉(cāng)庫(kù)和中央倉(cāng)庫(kù),有時(shí)候我們還會(huì)在本地倉(cāng)庫(kù)和中央倉(cāng)庫(kù)中間配置一個(gè)私有倉(cāng)庫(kù)吨灭,這主要是用來(lái)管理一些常用的刚照、公共的依賴包。同時(shí)也方便我們查詢喧兄。這里我們使用私有倉(cāng)庫(kù)nexus涩咖。
一、安裝
(1)解壓縮之后將
bin路徑
添加到環(huán)境變量(2)在命令行中使用命令
nexus install
進(jìn)行安裝(3)修改
E:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\bin\jsw\conf
中配置文件的wrapper.java.command=E:\javaJDK\jdk1.8.0_60\bin\java.exe
這一行繁莹,將地址改成本地jdk
的路徑檩互。(4)使用命令
nexus start
啟動(dòng)。注意:如果啟動(dòng)失敗咨演,可能是端口被占用闸昨,這里修改E:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\conf\ nexus.properties
中的端口號(hào),默認(rèn)是8081薄风,我們修改為8082饵较。(5)使用網(wǎng)址
http://localhost:8082/nexus
進(jìn)行訪問(wèn)。點(diǎn)擊左邊的Repositories
就可以看到工廠了遭赂。登錄帳號(hào)admin
循诉,密碼admin123
。
二撇他、倉(cāng)庫(kù)簡(jiǎn)介
在倉(cāng)庫(kù)中我們可以看到有很多類型的倉(cāng)庫(kù)
(1)
virtual
是一個(gè)針對(duì)maven1
的一個(gè)轉(zhuǎn)接倉(cāng)庫(kù)茄猫,現(xiàn)在對(duì)我們來(lái)說(shuō)沒(méi)什么用處狈蚤,此處不再講解。(2)
hosted
倉(cāng)庫(kù)都是內(nèi)部項(xiàng)目的發(fā)布倉(cāng)庫(kù)划纽。在hosted
倉(cāng)庫(kù)中release
表示內(nèi)部項(xiàng)目的release
模塊的發(fā)布倉(cāng)庫(kù)脆侮,snapshots
類似。3rd party
表示第三方依賴的倉(cāng)庫(kù)勇劣,這個(gè)數(shù)據(jù)通常是由內(nèi)部人員自行下載之后發(fā)布上去的靖避,也就是不能自動(dòng)在中央倉(cāng)庫(kù)中下載,比如Orecla
依賴包比默。(3)
proxy
類型倉(cāng)庫(kù)就是代理倉(cāng)庫(kù)幻捏,也就是要從遠(yuǎn)程中央倉(cāng)庫(kù)尋找數(shù)據(jù)的倉(cāng)庫(kù)。Apache Snapshot
表示的是Apache
的快照版本的倉(cāng)庫(kù)命咐,Center
表示中央倉(cāng)庫(kù)粘咖,點(diǎn)擊下面的Configuration
可以看到中央倉(cāng)庫(kù)的地址,我們可以更改侈百。Codehaus Snapshot
表示另一個(gè)開源組織Codehaus
的快照版本倉(cāng)庫(kù)。(4)
group
倉(cāng)庫(kù)翰铡。組倉(cāng)庫(kù)用來(lái)方便開發(fā)人員進(jìn)行設(shè)置的倉(cāng)庫(kù)钝域。也就是一個(gè)私有倉(cāng)庫(kù)。以后我們所有的下載都從此倉(cāng)庫(kù)中進(jìn)行下載锭魔。
三例证、配置
選中某個(gè)倉(cāng)庫(kù),在下面出現(xiàn)列表Configuration
中我們下拉可以看到Ordered Group Repositories
這一項(xiàng)迷捧,表示我們這個(gè)組中有列表中的倉(cāng)庫(kù)织咧,以后我們下載依賴包就只需要去找Public Repositories
也就是group
這個(gè)倉(cāng)庫(kù)(之后我們會(huì)進(jìn)行設(shè)置),它下面包含了很多中央倉(cāng)庫(kù)(這樣我們?cè)?code>pom/xml文件中就不需要配置很多中央倉(cāng)庫(kù)了)漠秋,分別下載不同類型的依賴包笙蒙,旁邊兩個(gè)沒(méi)有加進(jìn)來(lái)的我們可以自己加入進(jìn)來(lái)。
- (1)配置:在我們的項(xiàng)目中我們不需要管什么中央倉(cāng)庫(kù)庆锦,統(tǒng)統(tǒng)交給
group
這個(gè)倉(cāng)庫(kù)給我們管理
<repository>
<id>nexus</id>
<name>Nexus Repo</name>
<url>http://localhost:8082/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
在項(xiàng)目的parent
模塊中(user-parent
)中進(jìn)行上面的配置捅位,其中url
是group
倉(cāng)庫(kù)的地址,最后兩項(xiàng)表示允許下載release
版本和Snapshot
版本的依賴包搂抒。默認(rèn)的中央倉(cāng)庫(kù)中Snapshot
版本是不能下載的艇搀。
- (2)鏡像配置
在maven
安裝包的settings.xml
中進(jìn)行配置,注意:這個(gè)文件是我們自己本地倉(cāng)庫(kù)的里面的那個(gè)設(shè)置文件求晶,而不是maven/conf
中的那個(gè)配置文件焰雕。
<mirror>
<id>central</id>
<!--號(hào)表示所有的工廠都加鏡像,如果不想為所有工廠做鏡像芳杏,請(qǐng)使用id矩屁,使用逗號(hào)分隔-->
<!--<mirrorOf>central, nexus</mirrorOf>不建議-->
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://localhost:8082/nexus/content/groups/public/</url>
</mirror>
放在<mirrors>
標(biāo)簽中辟宗。
- (3)測(cè)試一下
我們可以找一個(gè)項(xiàng)目中沒(méi)有的依賴包添加進(jìn)去,在user-parent
中:
<dependency>
<groupId>mockobjects</groupId>
<artifactId>mockobjects-alt-jdk1.3</artifactId>
<version>0.09</version>
</dependency>
在user-core
中:
<dependency>
<groupId>mockobjects</groupId>
<artifactId>mockobjects-alt-jdk1.3</artifactId>
</dependency>
之后我們刷新nexus
的Browse Index
可以看到:
可以看到其配置信息就出現(xiàn)在我們的服務(wù)器上了档插。以后我們就不一定每次都去外面的工廠中找了慢蜓。私服是更具索引去找依賴的,但是有時(shí)候可能索引的版本太低郭膛,不符合要求晨抡,此時(shí)我們需要更新索引。
- (4)更新索引
- 一種方式是選中
Central
倉(cāng)庫(kù)在Configuration
中將Download Remote Indexes
的值設(shè)置為true
则剃,此時(shí)就會(huì)自動(dòng)幫我們更新耘柱,但是速度會(huì)很慢。
- 另一種方式是手動(dòng)更新棍现。方法是
在http://repo1.maven.org/maven2/.index/
下載下面兩個(gè)文件
- 一種方式是選中
nexus-maven-repository-index.properties
nexus-maven-repository-index.gz
同時(shí)在
http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.maven.indexer%22%20AND%20a%3A%22indexer-cli%22
下載indexer-cli-5.1.1.jar
调煎。
將下載的三個(gè)文件放在同一個(gè)目錄(E:\nexus-2.11.4-01-bundle\index
)下,然后通過(guò)DOS
進(jìn)入此目錄中己肮,使用命令
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
將壓縮文件解壓士袄,之后在indexer
目錄下會(huì)看到很多文件。此時(shí)我們先將nexus
關(guān)閉谎僻,然后將這些文件拷貝到
E:\nexus-2.11.4-01-bundle\sonatype-work\nexus\indexer\central-ctx
目錄下(將原來(lái)的所有文件都刪除)娄柳。之后啟動(dòng)nexus
,可以在Browse Index
中看到很多索引艘绍,我們之后可以自己更新這些索引赤拒,右鍵Central
點(diǎn)擊Update Index
即可。
然后我們可以在搜索框中搜索我們想要的索引诱鞠,不需要去其他地方搜索了挎挖。比如我們搜索spring web
會(huì)出來(lái)很多結(jié)果,然后選擇org.springframework
中的一個(gè):
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
加入到user-parent
和user-core
中航夺,之后我們?cè)?code>Browse Storage中就可以找到:
注意:如果我們將本地group倉(cāng)庫(kù)的配置去掉蕉朵,還是會(huì)下載的,因?yàn)樵?code>maven的包中本身默認(rèn)配置了一個(gè)中央倉(cāng)庫(kù)了阳掐。但是這個(gè)倉(cāng)庫(kù)默認(rèn)將
Snapshot
關(guān)閉了墓造,所以我們需要在項(xiàng)目中進(jìn)行設(shè)置。但是這樣每次都要在項(xiàng)目中進(jìn)行配置锚烦,每個(gè)模塊都要配置比較麻煩觅闽,所以我們需要在本地倉(cāng)庫(kù)中的
setttings.xml
中進(jìn)行配置:
<profile>
<id>central-repos</id>
<repositories>
<repository>
<id>central</id>
<name>central</name>
<url>http://central</url>
<snapshots><enabled>true</enabled></snapshots>
<releases><enabled>true</enabled></releases>
</repository>
</repositories>
</profile>
放在<profiles>
標(biāo)簽中。注意:配置了鏡像之后<url>
就沒(méi)有意義了涮俄,隨便填一個(gè)(這項(xiàng)卻不能少)蛉拙,但是還需要在setttings.xml
最后配置:
<activeProfiles>
<activeProfile>central-repos</activeProfile>
</activeProfiles>
將配置激活。
四彻亲、項(xiàng)目發(fā)布
- 在本地倉(cāng)庫(kù)的
setttings.xml
中配置發(fā)布權(quán)限:
<!--配置用戶發(fā)布快照版本的權(quán)限-->
<server>
<id>user-snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<!--配置用戶發(fā)布release版本的權(quán)限-->
<server>
<id>user-releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
放在<servers>
標(biāo)簽中孕锄。這里其實(shí)就是給我們發(fā)布時(shí)的權(quán)限吮廉。
- 在
user-parent
中配置
<distributionManagement>
<snapshotRepository>
<id>user-snapshots</id>
<name>User Project SNAPSHOTS</name>
<url>http://localhost:8082/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>user-releases</id>
<name>User Project Release</name>
<url>http://localhost:8082/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>
注意:上面配置的其實(shí)就是我們的項(xiàng)目發(fā)布到哪個(gè)倉(cāng)庫(kù),這里配置的是releases
和snapshots
畸肆,當(dāng)然在發(fā)布之前我們需要在這兩個(gè)倉(cāng)庫(kù)的配置中配置允許發(fā)布宦芦。將Deployment policy
設(shè)置為Allow Redeploy
,然后保存即可轴脐。
注意:此配置中的
id
需要和maven
倉(cāng)庫(kù)settings.xml
中的id
對(duì)應(yīng)调卑,同時(shí)url
就是nexus
中快照倉(cāng)庫(kù)和release
倉(cāng)庫(kù)的地址。然后使用命令clean deploy
進(jìn)行發(fā)布大咱。因?yàn)槲覀儼l(fā)布的是快照版本恬涧,所以選中Snapshots
中的Browse Storage
刷新之后可以看到我們發(fā)布的項(xiàng)目。五碴巾、創(chuàng)建項(xiàng)目工廠和設(shè)置權(quán)限
在以后的項(xiàng)目開發(fā)中我們不能將所有的模塊一下子全部發(fā)布到公共的哪個(gè)release
和Snapshots
倉(cāng)庫(kù)中溯捆,那樣不便于管理,而且有可能沖突厦瓢,所以我們一般將一些公共的模塊發(fā)布到公共的release
和Snapshots
倉(cāng)庫(kù)中提揍,而一些特殊的模塊發(fā)布到我們自己的倉(cāng)庫(kù)中,所以我們需要?jiǎng)?chuàng)建自己的倉(cāng)庫(kù)煮仇,這樣有利于管理劳跃。
-
(1)創(chuàng)建一個(gè)自己的
release
版本發(fā)布工廠和快照版本發(fā)布工廠
點(diǎn)擊Add
選擇Hosted Repository
,選中之后在下面填寫相關(guān)信息:
其中第一項(xiàng)和第二項(xiàng)是我們自己填的欺抗,然后選擇允許發(fā)布(默認(rèn)是不允許的)即可點(diǎn)擊save
保存。注意:最后一項(xiàng)如果是release
版本就選擇release
强重,如果是Snapshot
就選擇Snapshot
绞呈。而快照版本的工廠建立類似。
這樣我們就建立好了兩個(gè)我們自己私有的倉(cāng)庫(kù)
-
(2)為上面兩個(gè)工廠打開權(quán)限
點(diǎn)擊Security
中的Privileges
间景,然后點(diǎn)擊Add
佃声,在下面填寫相關(guān)信息:
注意:最好不要寫中文。名字我們可以任取倘要,最后和項(xiàng)目工廠id
一樣圾亏,工廠選擇我們release
版本工廠的名字,最后一項(xiàng)按圖中選擇封拧。點(diǎn)擊save
保存志鹃。對(duì)于快照版本的類似:
注意:配置完之后在上面要出現(xiàn)我們配置的權(quán)限才算成功:
-
(3)創(chuàng)建角色并且分配權(quán)限
選擇Security
中的Roles
,點(diǎn)擊Add
泽西,然后進(jìn)行添加:
Role Id
和Name
由我們自己填寫曹铃。注意:不要寫中文。然后點(diǎn)擊Add
捧杉,之后我們需要選擇剛才添加的權(quán)限陕见,這里我們只創(chuàng)建一個(gè)角色秘血,所以將快照和release
權(quán)限都選中(我們可以在輸入框中輸入My,然后點(diǎn)擊過(guò)濾Apply Filter
)评甜,點(diǎn)擊ok
灰粮,之后點(diǎn)擊save
保存。 -
(4)創(chuàng)建用戶
點(diǎn)擊Security
中的Users
忍坷,點(diǎn)擊Add
Status
中需要選擇Active
粘舟,然后點(diǎn)擊Add
,選擇我們剛才創(chuàng)建的角色承匣。保存即可蓖乘。密碼是123456
(5)創(chuàng)建發(fā)布工廠
當(dāng)我們建立好自己的發(fā)布工廠之后我們就不要發(fā)布到以前那兩個(gè)倉(cāng)庫(kù)中了,所以需要將user-parent
中的配置地址改動(dòng)
<distributionManagement>
<snapshotRepository>
<id>user-snapshots</id>
<name>User Project SNAPSHOTS</name>
<!-- <url>http://localhost:8082/nexus/content/repositories/snapshots/</url> -->
<url>http://localhost:8082/nexus/content/repositories/MyUserReposSnapshots/</url>
</snapshotRepository>
<repository>
<id>user-releases</id>
<name>User Project Release</name>
<!-- <url>http://localhost:8082/nexus/content/repositories/releases/</url> -->
<url>http://localhost:8082/nexus/content/repositories/MyUserReposRelease/</url>
</repository>
</distributionManagement>
這里改動(dòng)之后我們?cè)?code>settings.xml中也需要改動(dòng):
<!--配置用戶發(fā)布快照版本的權(quán)限-->
<server>
<id>user-snapshots</id>
<!--<username>deployment</username>-->
<username>kh</username>
<!--<password>deployment123</password>-->
<password>123456</password>
</server>
<!--配置用戶發(fā)布release版本的權(quán)限-->
<server>
<id>user-releases</id>
<!--<username>deployment</username>-->
<username>kh</username>
<!--<password>deployment123</password>-->
<password>123456</password>
</server>
當(dāng)然這里我們只是做一個(gè)試驗(yàn)韧骗,名字和密碼我們可以自己進(jìn)行配置嘉抒。
配置完之后再次進(jìn)行發(fā)布,我們可以看到
當(dāng)然對(duì)于一些公共模塊袍暴,比如
user-log
模塊些侍,我們需要配置
<distributionManagement>
<snapshotRepository>
<id>user-snapshots</id>
<name>User Project SNAPSHOTS</name>
<url>http://localhost:8082/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>user-releases</id>
<name>User Project Release</name>
<url>http://localhost:8082/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>
我們這樣配置之后就會(huì)將user-parent
中的配置覆蓋掉,這樣就發(fā)布到公共的倉(cāng)庫(kù)中了政模。
補(bǔ):如果公司不能訪問(wèn)外網(wǎng)岗宣,則需要配置代理,配置之后一定記得將本地倉(cāng)庫(kù)_remote.repositories淋样、**.pom.lastUpdated
文件全部刪除耗式。