1. 搭建私有庫(kù)
使用docker搭建私有maven庫(kù)占锯,docker image為sonatype/nexus3
- 建立數(shù)據(jù)目錄
mkdir /path/of/maven/data
chown 200 /path/of/maven/data
nexus3的運(yùn)行用戶id為200,所以需要把數(shù)據(jù)目錄的owner改為200。
- 啟動(dòng)服務(wù)
docker run -d -p 8081:8081 --name nexus -v /path/of/maven/data:/nexus-data sonatype/nexus3
- 登錄nexus服務(wù)
在瀏覽器中輸入127.0.0.1:8081
枝秤,點(diǎn)擊sign in
鏈接花颗,默認(rèn)的管理員用戶名為admin
密碼為admin123
卖哎。 - 創(chuàng)建repository
登錄后,在管理員頁(yè)面录淡,可以創(chuàng)建自己的repository捌木。如果創(chuàng)建自己的私有庫(kù),創(chuàng)建時(shí)嫉戚,選擇maven2 (hosted)
刨裆,如果創(chuàng)建代理庫(kù),則選擇maven2 (proxy)
彬檀。詳見(jiàn)參考文檔[2]
- hosted類型
這里需要變更的是Version policy
帆啃,有3個(gè)選擇:- Release - 表明本庫(kù)里放置的是正式發(fā)布的庫(kù)文件
- Snapshot - 表明本庫(kù)里放置的是開(kāi)發(fā)中的庫(kù)文件
- Mixed - 表明庫(kù)里面放置了上述兩種庫(kù)文件
- proxy類型
這里需要填寫(xiě)的是Remote storage
項(xiàng),可以填寫(xiě)aliyun的maven鏡像地址http://maven.aliyun.com/nexus/content/groups/public/
- hosted類型
經(jīng)過(guò)上面的步驟凤覆,私有maven庫(kù)建立完畢链瓦。接下來(lái)配置本地的maven配置文件,來(lái)使用私有maven庫(kù)盯桦。
2. 配置maven setting.xml
maven設(shè)定文件為~/.m2/setting.xml
<settings>
<profiles>
<profile>
<id>dev</id>
<repositories>
<repository>
<id>mymvn</id>
<url>http://127.0.0.1:8081/repository/mymvn/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<servers>
<server>
<id>mymvn</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>alimavenlocal</id>
<name>aliyun maven local</name>
<url>http://127.0.0.1:8081/repository/aliyunmaven/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
上面的配置文件配置了1個(gè)hosted庫(kù)慈俯,1個(gè)proxy庫(kù)。以及上傳文件時(shí)需要用的用戶名密碼拥峦。這里在profiles
中配置repository
贴膘,可以根據(jù)不同的profile
使用不同的repository
。
3. 部署jar到私有庫(kù)
使用mvn
命令把jar文件上傳到hosted庫(kù)略号,以alipay sdk為例:
mvn deploy:deploy-file \
-DgroupId=com.alipay \
-DartifactId=sdk-java \
-Dversion=20170829142630 \
-Dpackaging=jar \
-Dfile=alipay-sdk-java20170829142630.jar \
-Durl=http://127.0.0.1:8081/repository/mymvn/ \
-DrepositoryId=mymvn
4. 配置pom.xml
使用私有庫(kù)
按照下面的配置即可下載到剛才上傳的alipay sdk
<project>
...
<repositories>
<repository>
<id>mymvn</id>
<url>http://127.0.0.1:8081/repository/mymvn/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.alipay</groupId>
<artifactId>sdk-java</artifactId>
<version>20170829142630</version>
</dependency>
</dependencies>
</project>
5. 配置pom.xml
刑峡,發(fā)布編譯的成果到hosted庫(kù)
<project>
...
<repositories>
<repository>
<id>mymvn</id>
<url>http://127.0.0.1:8081/repository/mymvn/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
在pom.xml
所在目錄運(yùn)行下面命令,把自己開(kāi)發(fā)的庫(kù)部署到hosted庫(kù)中玄柠,mvn會(huì)根據(jù)pom中的version
屬性判斷發(fā)布的是release
版還是snapshot
版突梦。
mvn deploy
6. 版本發(fā)布
每次發(fā)布的時(shí)候,需要修改pom.xml中的版本號(hào)羽利,打包宫患,測(cè)試,提交代碼这弧,上傳jar文件到mvn庫(kù)娃闲。上述一系列動(dòng)作虚汛,可以使用release的插件來(lái)自動(dòng)完成。命令如下:
$ mvn release:prepare
...
[INFO] Working directory: /Users/menglj/workspace/qiyitech/pfw
[INFO] Checking dependencies and plugins for snapshots ...
What is the release version for "pfw"? (cn.com.qiyitech:pfw) 0.4.0: :
# maven會(huì)根據(jù)pom中的版本信息來(lái)發(fā)布皇帮,如果pom中寫(xiě)的是`0.4.0-SNAPSHOT`卷哩,
# 則發(fā)布的版本為`0.4.0`。這里直接回車即可属拾。
What is SCM release tag or label for "pfw"? (cn.com.qiyitech:pfw) pfw-0.4.0: :
# tag名稱将谊,默認(rèn)即可
What is the new development version for "pfw"? (cn.com.qiyitech:pfw) 0.4.1-SNAPSHOT: :
# 發(fā)布后,下一版本的版本號(hào)是多少捌年,可以改為0.5.0-SNAPSHOT
命令執(zhí)行結(jié)束后瓢娜,會(huì)把打包好的package上傳到pom中配置的maven庫(kù)中,修改pom.xml中相應(yīng)版本號(hào)礼预,并提交到版本庫(kù)中眠砾,打上相應(yīng)的tag。
7. 配置maven鏡像
修改maven的settings.xml托酸,增加如下字段:
<settings>
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
</settings>
如果自己搭建了私有庫(kù)褒颈,在鏡像中沒(méi)有私有庫(kù)中的內(nèi)容,則修改mirrorOf
屬性[3]励堡,指明鏡像的庫(kù)ID即可谷丸,例如:
<mirrorOf>central</mirrorOf>
或者把不走鏡像的私有庫(kù)ID排除
<mirrorOf>*,!mymvn</mirrorOf>