Maven 是一個(gè)項(xiàng)目管理和構(gòu)建自動(dòng)化工具, Maven倉(cāng)庫(kù) 是用于存放不同編譯的artifacts和dependencies(依賴)的模塊集合。嚴(yán)格而言,主要有兩類倉(cāng)庫(kù): local(本地) 和 remote(遠(yuǎn)端) 。
本地倉(cāng)庫(kù)存放本地安裝的來(lái)自遠(yuǎn)端倉(cāng)庫(kù)的模塊,可看作遠(yuǎn)端模塊在本地的一份緩存,同時(shí)也包含本地編譯尚未發(fā)布的模塊。遠(yuǎn)端倉(cāng)庫(kù)指任何類型的倉(cāng)庫(kù),能夠通過(guò)許多不同的協(xié)議訪問(wèn),如file://和http://,可以是“真正的”類似repo.maven.org由第三方提供的遠(yuǎn)程倉(cāng)庫(kù)用于提供公開(kāi)模塊下載,也可用于團(tuán)隊(duì)內(nèi)部基于文件或者h(yuǎn)ttp服務(wù)器分享私有模塊。
不論本地還是遠(yuǎn)端倉(cāng)庫(kù)都是滿足相同的結(jié)構(gòu)規(guī)則,因此遠(yuǎn)端模塊很容易共享到任何地方,也可以同步到本地以離線環(huán)境下使用。一般而言這些倉(cāng)庫(kù)的構(gòu)造對(duì)于maven用戶是完全透明的。
一般而言,業(yè)界已經(jīng)有許多成熟的maven倉(cāng)庫(kù)解決方案,如Nexus等,只需擁有一臺(tái)服務(wù)器,并下載并安裝maven倉(cāng)庫(kù)服務(wù)軟件,然后啟動(dòng)即可。但對(duì)于個(gè)人開(kāi)發(fā)者而言,若需要搭建用于分享和發(fā)布個(gè)人開(kāi)發(fā)artifacts的公開(kāi)maven倉(cāng)庫(kù),選擇之一自然是購(gòu)買一臺(tái)vps服務(wù)器,然后安裝maven倉(cāng)庫(kù)服務(wù)軟件,然而另外一種完全免費(fèi)的選擇則是完全基于github實(shí)現(xiàn),本文將為您詳細(xì)介紹后一種更為極客的實(shí)踐方案。其原理是利用github的git push來(lái)發(fā)布artifects,利用github提供的公開(kāi)raw服務(wù)提供對(duì)外下載服務(wù)。當(dāng)向開(kāi)源社區(qū)共享自己開(kāi)發(fā)的artifects時(shí),只需要提供模塊pom信息和個(gè)人獨(dú)一無(wú)二的倉(cāng)庫(kù)地址即可:
https://raw.github.com/${github_account}/maven/snapshot/
https://raw.github.com/${github_account}/maven/release/
準(zhǔn)備
申請(qǐng)Github帳號(hào)并配置ssh public key: http://github.com
安裝Git工具: http://git-scm.com
安裝Maven工具: http://maven.apache.org
搭建過(guò)程
- 利用github網(wǎng)站中創(chuàng)建一個(gè)新的倉(cāng)庫(kù),記下倉(cāng)庫(kù)地址:
git@github.com:${github_account}/maven.git - 進(jìn)入 ${HOME}/.m2/repository/,初始化git本地倉(cāng)庫(kù),添加員段地址。
$ cd ~/.m2/repository
$ git init
$ git remote add origin git@github.com:hchen9/maven.git
- 創(chuàng)建.gitignore 將文件匹配符*加入其中, 并將.gitignore提交git本地倉(cāng)庫(kù)master分支
$ echo "*" >> .gitignore
$ git add .gitgnore
$ git commit -m 'add .gitignore by ignoring all'
- 分別創(chuàng)建分支snapshot與release并push至遠(yuǎn)端倉(cāng)庫(kù),用于發(fā)布不同狀態(tài)的artifects,默認(rèn)情況切換至snapshot
$ git branch snapshot
$ git branch release
$ git push origin snapshot
$ git push origin release
$ git checkout snapshot
- 當(dāng)開(kāi)發(fā)完成發(fā)布新的artifects(例如com.github.${github_account}:${artifactId}:${version})時(shí),首先利用mvn install 將artifects安裝至本地maven倉(cāng)庫(kù)中 ~/.m2/repositor
$ cd ${project_root}
$ mvn install
然后,將需要發(fā)布對(duì)應(yīng)版本的artifects所聞提交至本地git倉(cāng)庫(kù)中,然后push至對(duì)應(yīng)的分支snapshot 或 release.
$ cd ~/.m2/repository
$ git add -f com/github/${github_account}/${artifactId}/${version}
$ git commit -m 'snapshot of com.github.${github_account}:${artifactId}:${version}'
$ git push origin snapshot
- 在pom.xml中使用maven artifact添加以下配置:
<project>
<!--Add repositories-->
<repositories>
<repository>
<id>haoch-maven-snapshot-repository</id>
<name>haoch-maven-snapshot-repository</name>
<url>https://raw.github.com/${github_account}/maven/snapshot/</url>
</repository>
<repository>
<id>haoch-maven-release-repository</id>
<name>haoch-maven-release-repository</name>
<url>https://raw.github.com/${github_account}/maven/release/</url>
</repository>
</repositories>
<!-- Add dependencies -->
<dependencies>
<dependency>
<artifactId>${artifactId}</artifactId>
<groupId>com.github.${github_account}</groupId>
<version>${version}</version>
</dependency>
</dependencies>
</project>
總結(jié)
Github 目前為止也許是最好的代碼托管服務(wù)和社交編程平臺(tái),擁有非常好的開(kāi)源分享文化,在這里分享可復(fù)用的maven artifact自然也是最佳選擇。
Git原生提供的強(qiáng)大版本控制能力,在日常開(kāi)發(fā)中必不可少,加上Github免費(fèi)的git repository的靜態(tài)raw訪問(wèn)服務(wù),Github作為maven remote repository可以和日常開(kāi)發(fā)工作有效的融合。