本文由黑壳博客编写
本文来源使用Github搭建Maven私有远程仓库
本文借鉴此文两篇文章,进行了一些汇总和言语不清晰的地方进行修改
https://blog.csdn.net/hengyunabc/article/details/47308913
https://juejin.im/post/5cbb2a83f265da03775c4db4?utm_source=gold_browser_extension
壳叔搞笑时间
想法
为了避免重复造轮子,我们可以在项目中引入依赖,使用现有的成熟解决方案。
也许你不满足于“借”轮子,还想自己造轮子,这个时候你就可以把自己的代码放入公共的仓库,供大家使用。
但使用公共的依赖仓库很麻烦,幸好github为我们提供了一种简便的大家自己的公共依赖仓库的方式。
自从今年Github支持免费的个人私有仓库以后,github越来越成为自己日常学习、写作和开发必不可少的工具了。
之前因为github的私有仓库收费,不得已使用了gitee和bitbucket等工具。事实证明,这个世界,只需要一个Github。
下面就一步步带你搭建一下自己的Maven公共仓库。
简单来说,共有三步:
1.deploy到本地目录
2.把本地目录提交到gtihub上
3.配置github地址为仓库地址
配置local file maven仓库 deploy到本地
maven可以通过http, ftp, ssh等deploy到远程服务器,也可以deploy到本地文件系统里。
pom文件配置
例如把项目deploy到/home/ykz200/code/maven-repo/repository/目录下,只需要在项目pom.xml添加这项即可
<distributionManagement>
<repository>
<id>ykz200-maven-repo</id>
<url>file:/home/kzyuan/code/maven-repo/repository/</url>
</repository>
</distributionManagement>
通过命令行则是:
在自己本地创建一个目录,来放自己deploy的文件,然后在自己的项目目录下执行如下Maven命令:
mvn deploy -DaltDeploymentRepository=bhusk-mvn-repo::default::file:/home/kzyuan/code/maven-repo/repository/
推荐使用命令行来deploy,避免在项目里显式配置。
https://maven.apache.org/plugins/maven-deploy-plugin/
https://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html
把本地仓库提交到github上
上面把项目deploy到本地目录home/ykz200/code/maven-repo/repository里,下面把这个目录提交到github上。
在Github上新建一个项目,然后把home/ykz200/code/maven-repo下的文件都提交到gtihub上。
cd /home/kzyuan/code/maven-repo/
git init
git add repository/*
git commit -m 'deploy xxx'
git remote add origin git@github.com:ykz200/maven-repo.git
git push origin master
最终效果可以参考我的个人仓库:
https://github.com/ykz200/maven-repo
github maven仓库的使用
因为github使用了raw.githubusercontent.com这个域名用于raw文件下载。所以使用这个maven仓库,只要在pom.xml里增加:
<repositories>
<repository>
<id>ykz200-maven-repo</id>
<url>https://raw.githubusercontent.com/ykz200/maven-repo/master/repository</url>
</repository>
</repositories>
目录查看和搜索
值得注意的是,github因为安全原因,把raw文件下载和原来的github域名分开了,而raw.githubusercontent.com这个域名是不支持目录浏览的。所以,想要浏览文件目录,或者搜索的话,可以直接到github域名下的仓库去查看。
比如这个文件easyexcel-1.1.2-beta5.jar:
浏览器地址是:
https://github.com/ykz200/maven-repo/blob/master/repository/com/alibaba/easyexcel/1.1.2-beta5/easyexcel-1.1.2-beta5.jar
它的maven仓库url是:
https://raw.githubusercontent.com/ykz200/maven-repo/master/repository/com/alibaba/easyexcel/1.1.2-beta5/easyexcel-1.1.2-beta5.jar
maven仓库工作的机制
下面介绍一些maven仓库工作的原理。典型的一个maven依赖下会有这三个文件:
https://github.com/ykz200/maven-repo/repository/com/alibaba/easyexcel/1.1.2-beta5/
maven-metadata.xml
maven-metadata.xml.md5
maven-metadata.xml.sha1
maven-metadata.xml里面记录了最后deploy的版本和时间。
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<versioning>
<release>1.1.2-beta5</release>
<versions>
<version>1.1.2-beta5</version>
</versions>
<lastUpdated>20190422130027</lastUpdated>
</versioning>
</metadata>
其中md5, sha1校验文件是用来保证这个meta文件的完整性。
maven在编绎项目时,会先尝试请求maven-metadata.xml,如果没有找到,则会直接尝试请求到jar文件,在下载jar文件时也会尝试下载jar的md5, sha1文件。
maven-metadata.xml文件很重要,如果没有这个文件来指明最新的jar版本,那么即使远程仓库里的jar更新了版本,本地maven编绎时用上-U参数,也不会拉取到最新的jar!
所以并不能简单地把jar包放到github上就完事了,一定要先在本地Deploy,生成maven-metadata.xml文件,并上传到github上。
参考:http://maven.apache.org/ref/3.2.2/maven-repository-metadata/repository-metadata.html
maven的仓库关系
https://maven.apache.org/repository/index.html
配置使用本地仓库
想要使用本地file仓库里,在项目的pom.xml里配置,如:
<repositories>
<repository>
<id>ykz200-maven-repo</id>
<url>file:/home/ykz200/code/maven-repo/repository/</url>
</repository>
</repositories>
配置远程依赖
除了要把你的依赖坐标放到dependencies标签中之外,还需要在pom.xml中指定你的repositories的url。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beta5</version>
</dependency>
<repositories>
<repository>
<!-- A unique identifier for a repository. -->
<id>ykz200-maven-repo</id>
<!--Human readable name of the repository. -->
<name>bhusk.com repository</name>
<url>https://raw.githubusercontent.com/ykz200/maven-net-repo/master/repository</url>
<releases>
<enabled>true</enabled>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</repository>
</repositories>
这样你就可以下载远程仓库的依赖了。
注意事项
maven的repository并没有优先级的配置,也不能单独为某些依赖配置repository。所以如果项目配置了多个repository,在首次编绎时,会依次尝试下载依赖。如果没有找到,尝试下一个,整个流程会很长。
所以尽量多个依赖放同一个仓库,不要每个项目都有一个自己的仓库。
也许会出现的问题
参考链接
-
About
程序员没有表面那么光鲜亮丽
请善待你们身边的每一位程序员~
欢迎在评论写下你的程序员趣事,程序员不是一个死板的职业~~
欢迎扫描二维码加入我们的小组织 ,大家都叫壳叔,期待你的到来。
欢迎关注公众号
这是我们的Group
黑壳家根据地 Q群:200408242
自家的根据地
E-mail:keshu@bhusk.com
本文由 黑壳博客的壳叔 创作或转载,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章