前面我們講過本地倉庫和中央倉庫,有時候我們還會在本地倉庫和中央倉庫中間配置一個私有倉庫,這主要是用來管理一些常用的、公共的依賴包。同時也方便我們查詢。這里我們使用私有倉庫nexus。
一、安裝
(1)解壓縮之后將
bin路徑
添加到環境變量(2)在命令行中使用命令
nexus install
進行安裝(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
啟動。注意:如果啟動失敗,可能是端口被占用,這里修改E:\nexus-2.11.4-01-bundle\nexus-2.11.4-01\conf\ nexus.properties
中的端口號,默認是8081,我們修改為8082。(5)使用網址
http://localhost:8082/nexus
進行訪問。點擊左邊的Repositories
就可以看到工廠了。登錄帳號admin
,密碼admin123
。
二、倉庫簡介
在倉庫中我們可以看到有很多類型的倉庫
(1)
virtual
是一個針對maven1
的一個轉接倉庫,現在對我們來說沒什么用處,此處不再講解。(2)
hosted
倉庫都是內部項目的發布倉庫。在hosted
倉庫中release
表示內部項目的release
模塊的發布倉庫,snapshots
類似。3rd party
表示第三方依賴的倉庫,這個數據通常是由內部人員自行下載之后發布上去的,也就是不能自動在中央倉庫中下載,比如Orecla
依賴包。(3)
proxy
類型倉庫就是代理倉庫,也就是要從遠程中央倉庫尋找數據的倉庫。Apache Snapshot
表示的是Apache
的快照版本的倉庫,Center
表示中央倉庫,點擊下面的Configuration
可以看到中央倉庫的地址,我們可以更改。Codehaus Snapshot
表示另一個開源組織Codehaus
的快照版本倉庫。(4)
group
倉庫。組倉庫用來方便開發人員進行設置的倉庫。也就是一個私有倉庫。以后我們所有的下載都從此倉庫中進行下載。
三、配置
選中某個倉庫,在下面出現列表Configuration
中我們下拉可以看到Ordered Group Repositories
這一項,表示我們這個組中有列表中的倉庫,以后我們下載依賴包就只需要去找Public Repositories
也就是group
這個倉庫(之后我們會進行設置),它下面包含了很多中央倉庫(這樣我們在pom/xml
文件中就不需要配置很多中央倉庫了),分別下載不同類型的依賴包,旁邊兩個沒有加進來的我們可以自己加入進來。
- (1)配置:在我們的項目中我們不需要管什么中央倉庫,統統交給
group
這個倉庫給我們管理
<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>
在項目的parent
模塊中(user-parent
)中進行上面的配置,其中url
是group
倉庫的地址,最后兩項表示允許下載release
版本和Snapshot
版本的依賴包。默認的中央倉庫中Snapshot
版本是不能下載的。
- (2)鏡像配置
在maven
安裝包的settings.xml
中進行配置,注意:這個文件是我們自己本地倉庫的里面的那個設置文件,而不是maven/conf
中的那個配置文件。
<mirror>
<id>central</id>
<!--號表示所有的工廠都加鏡像,如果不想為所有工廠做鏡像,請使用id,使用逗號分隔-->
<!--<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>
標簽中。
- (3)測試一下
我們可以找一個項目中沒有的依賴包添加進去,在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
可以看到:
可以看到其配置信息就出現在我們的服務器上了。以后我們就不一定每次都去外面的工廠中找了。私服是更具索引去找依賴的,但是有時候可能索引的版本太低,不符合要求,此時我們需要更新索引。
- (4)更新索引
- 一種方式是選中
Central
倉庫在Configuration
中將Download Remote Indexes
的值設置為true
,此時就會自動幫我們更新,但是速度會很慢。
3 - 另一種方式是手動更新。方法是
在http://repo1.maven.org/maven2/.index/
下載下面兩個文件
- 一種方式是選中
nexus-maven-repository-index.properties
nexus-maven-repository-index.gz
同時在
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
。
將下載的三個文件放在同一個目錄(E:\nexus-2.11.4-01-bundle\index
)下,然后通過DOS
進入此目錄中,使用命令
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
將壓縮文件解壓,之后在indexer
目錄下會看到很多文件。此時我們先將nexus
關閉,然后將這些文件拷貝到
E:\nexus-2.11.4-01-bundle\sonatype-work\nexus\indexer\central-ctx
目錄下(將原來的所有文件都刪除)。之后啟動nexus
,可以在Browse Index
中看到很多索引,我們之后可以自己更新這些索引,右鍵Central
點擊Update Index
即可。
然后我們可以在搜索框中搜索我們想要的索引,不需要去其他地方搜索了。比如我們搜索spring web
會出來很多結果,然后選擇org.springframework
中的一個:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
加入到user-parent
和user-core
中,之后我們在Browse Storage
中就可以找到:
注意:如果我們將本地group倉庫的配置去掉,還是會下載的,因為在
maven
的包中本身默認配置了一個中央倉庫了。但是這個倉庫默認將Snapshot
關閉了,所以我們需要在項目中進行設置。但是這樣每次都要在項目中進行配置,每個模塊都要配置比較麻煩,所以我們需要在本地倉庫中的
setttings.xml
中進行配置:
<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>
標簽中。注意:配置了鏡像之后<url>
就沒有意義了,隨便填一個(這項卻不能少),但是還需要在setttings.xml
最后配置:
<activeProfiles>
<activeProfile>central-repos</activeProfile>
</activeProfiles>
將配置激活。
四、項目發布
- 在本地倉庫的
setttings.xml
中配置發布權限:
<!--配置用戶發布快照版本的權限-->
<server>
<id>user-snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<!--配置用戶發布release版本的權限-->
<server>
<id>user-releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
放在<servers>
標簽中。這里其實就是給我們發布時的權限。
- 在
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>
注意:上面配置的其實就是我們的項目發布到哪個倉庫,這里配置的是releases
和snapshots
,當然在發布之前我們需要在這兩個倉庫的配置中配置允許發布。將Deployment policy
設置為Allow Redeploy
,然后保存即可。
注意:此配置中的
id
需要和maven
倉庫settings.xml
中的id
對應,同時url
就是nexus
中快照倉庫和release
倉庫的地址。然后使用命令clean deploy
進行發布。因為我們發布的是快照版本,所以選中Snapshots
中的Browse Storage
刷新之后可以看到我們發布的項目。五、創建項目工廠和設置權限
在以后的項目開發中我們不能將所有的模塊一下子全部發布到公共的哪個release
和Snapshots
倉庫中,那樣不便于管理,而且有可能沖突,所以我們一般將一些公共的模塊發布到公共的release
和Snapshots
倉庫中,而一些特殊的模塊發布到我們自己的倉庫中,所以我們需要創建自己的倉庫,這樣有利于管理。
-
(1)創建一個自己的
release
版本發布工廠和快照版本發布工廠
點擊Add
選擇Hosted Repository
,選中之后在下面填寫相關信息:
8
其中第一項和第二項是我們自己填的,然后選擇允許發布(默認是不允許的)即可點擊save
保存。注意:最后一項如果是release
版本就選擇release
,如果是Snapshot
就選擇Snapshot
。而快照版本的工廠建立類似。
9
這樣我們就建立好了兩個我們自己私有的倉庫
10 -
(2)為上面兩個工廠打開權限
點擊Security
中的Privileges
,然后點擊Add
,在下面填寫相關信息:
11
注意:最好不要寫中文。名字我們可以任取,最后和項目工廠id
一樣,工廠選擇我們release
版本工廠的名字,最后一項按圖中選擇。點擊save
保存。對于快照版本的類似:
12
注意:配置完之后在上面要出現我們配置的權限才算成功:
13 -
(3)創建角色并且分配權限
選擇Security
中的Roles
,點擊Add
,然后進行添加:
14
Role Id
和Name
由我們自己填寫。注意:不要寫中文。然后點擊Add
,之后我們需要選擇剛才添加的權限,這里我們只創建一個角色,所以將快照和release
權限都選中(我們可以在輸入框中輸入My,然后點擊過濾Apply Filter
),點擊ok
,之后點擊save
保存。 -
(4)創建用戶
點擊Security
中的Users
,點擊Add
15
Status
中需要選擇Active
,然后點擊Add
,選擇我們剛才創建的角色。保存即可。密碼是123456
(5)創建發布工廠
當我們建立好自己的發布工廠之后我們就不要發布到以前那兩個倉庫中了,所以需要將user-parent
中的配置地址改動
<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>
這里改動之后我們在settings.xml
中也需要改動:
<!--配置用戶發布快照版本的權限-->
<server>
<id>user-snapshots</id>
<!--<username>deployment</username>-->
<username>kh</username>
<!--<password>deployment123</password>-->
<password>123456</password>
</server>
<!--配置用戶發布release版本的權限-->
<server>
<id>user-releases</id>
<!--<username>deployment</username>-->
<username>kh</username>
<!--<password>deployment123</password>-->
<password>123456</password>
</server>
當然這里我們只是做一個試驗,名字和密碼我們可以自己進行配置。
配置完之后再次進行發布,我們可以看到
當然對于一些公共模塊,比如
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>
我們這樣配置之后就會將user-parent
中的配置覆蓋掉,這樣就發布到公共的倉庫中了。
補:如果公司不能訪問外網,則需要配置代理,配置之后一定記得將本地倉庫_remote.repositories、**.pom.lastUpdated
文件全部刪除。