基于Github搭建Maven仓库的方法

Maven 是一个项目管理和构建自动化工具, Maven仓库 是用于存放不同编译的artifacts和dependencies(依赖)的模块集合。严格而言,主要有两类仓库: local(本地) 和 remote(远端) 。

本地仓库存放本地安装的来自远端仓库的模块,可看作远端模块在本地的一份缓存,同时也包含本地编译尚未发布的模块。远端仓库指任何类型的仓库,能够通过许多不同的协议访问,如file://和http://,可以是“真正的”类似repo.maven.org由第三方提供的远程仓库用于提供公开模块下载,也可用于团队内部基于文件或者http服务器分享私有模块。

不论本地还是远端仓库都是满足相同的结构规则,因此远端模块很容易共享到任何地方,也可以同步到本地以离线环境下使用。一般而言这些仓库的构造对于maven用户是完全透明的。

一般而言,业界已经有许多成熟的maven仓库解决方案,如Nexus等,只需拥有一台服务器,并下载并安装maven仓库服务软件,然后启动即可。但对于个人开发者而言,若需要搭建用于分享和发布个人开发artifacts的公开maven仓库,选择之一自然是购买一台vps服务器,然后安装maven仓库服务软件,然而另外一种完全免费的选择则是完全基于github实现,本文将为您详细介绍后一种更为极客的实践方案。其原理是利用github的git push来发布artifects,利用github提供的公开raw服务提供对外下载服务。当向开源社区共享自己开发的artifects时,只需要提供模块pom信息和个人独一无二的仓库地址即可:

https://raw.github.com/${github_account}/maven/snapshot/
https://raw.github.com/${github_account}/maven/release/

准备

申请Github帐号并配置ssh public key: http://github.com
安装Git工具: http://git-scm.com
安装Maven工具: http://maven.apache.org

搭建过程

  1. 利用github网站中创建一个新的仓库,记下仓库地址:
    git@github.com:${github_account}/maven.git
  2. 进入 ${HOME}/.m2/repository/,初始化git本地仓库,添加员段地址。
$ cd ~/.m2/repository
$ git init
$ git remote add origin git@github.com:hchen9/maven.git
  1. 创建.gitignore 将文件匹配符*加入其中, 并将.gitignore提交git本地仓库master分支
$ echo "*" >> .gitignore
$ git add .gitgnore
$ git commit -m 'add .gitignore by ignoring all'
  1. 分别创建分支snapshot与release并push至远端仓库,用于发布不同状态的artifects,默认情况切换至snapshot
$ git branch snapshot
$ git branch release
$ git push origin snapshot
$ git push origin release
$ git checkout snapshot
  1. 当开发完成发布新的artifects(例如com.github.${github_account}:${artifactId}:${version})时,首先利用mvn install 将artifects安装至本地maven仓库中 ~/.m2/repositor
$ cd ${project_root}
$ mvn install

然后,将需要发布对应版本的artifects所闻提交至本地git仓库中,然后push至对应的分支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>

总结

Github 目前为止也许是最好的代码托管服务和社交编程平台,拥有非常好的开源分享文化,在这里分享可复用的maven artifact自然也是最佳选择。

Git原生提供的强大版本控制能力,在日常开发中必不可少,加上Github免费的git repository的静态raw访问服务,Github作为maven remote repository可以和日常开发工作有效的融合。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,561评论 18 139
  • |-1-更新内容[6.从仓库解析依赖的机制(重要)] 1Maven仓库作用 仓库用来存储所有项目使用到构件,在ma...
    zlcook阅读 6,011评论 0 25
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,377评论 2 44
  • 我坐在窗前,呆呆地望着夜空 想你的刹那一刻 我笑了,傻傻的像个孩子
    LYL思海阅读 104评论 0 0
  • 曾想做一位浪迹天涯的诗人,持一卷书,倚一窗幽竹,看遍悠然古道,留下磨灭过得足迹,踏破默默红尘,寻找一抹诗意...
    殤雪阅读 192评论 0 1