基于Github搭建Maven倉(cāng)庫(kù)的方法

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ò)程

  1. 利用github網(wǎng)站中創(chuàng)建一個(gè)新的倉(cāng)庫(kù),記下倉(cāng)庫(kù)地址:
    git@github.com:${github_account}/maven.git
  2. 進(jìn)入 ${HOME}/.m2/repository/,初始化git本地倉(cāng)庫(kù),添加員段地址。
$ cd ~/.m2/repository
$ git init
$ git remote add origin git@github.com:hchen9/maven.git
  1. 創(chuàng)建.gitignore 將文件匹配符*加入其中, 并將.gitignore提交git本地倉(cāng)庫(kù)master分支
$ echo "*" >> .gitignore
$ git add .gitgnore
$ git commit -m 'add .gitignore by ignoring all'
  1. 分別創(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
  1. 當(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
  1. 在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ā)工作有效的融合。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,634評(píng)論 19 139
  • |-1-更新內(nèi)容[6.從倉(cāng)庫(kù)解析依賴的機(jī)制(重要)] 1Maven倉(cāng)庫(kù)作用 倉(cāng)庫(kù)用來(lái)存儲(chǔ)所有項(xiàng)目使用到構(gòu)件,在ma...
    zlcook閱讀 6,464評(píng)論 0 25
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,889評(píng)論 2 45
  • 我坐在窗前,呆呆地望著夜空 想你的剎那一刻 我笑了,傻傻的像個(gè)孩子
    LYL思海閱讀 127評(píng)論 0 0
  • 曾想做一位浪跡天涯的詩(shī)人,持一卷書(shū),倚一窗幽竹,看遍悠然古道,留下磨滅過(guò)得足跡,踏破默默紅塵,尋找一抹詩(shī)意...
    殤雪閱讀 211評(píng)論 0 1

友情鏈接更多精彩內(nèi)容