Gradle中使用git仓库作为maven私有仓库

Maven是Java开发最流行的依赖管理工具。

在项目中,我们经常会引用别人的Maven包,偶尔,我们也会开发Maven包,希望别人引用,那么问题来了,如何让别人找到你的Maven包呢,有这么几个方法:

  1. 直接拷贝Jar包
  2. 使用JCenter等第三方Maven仓库
  3. 自己搭建Maven私有仓库

上述方案1显然是用来搞笑的,不仅效率低下,也不利于运维。

使用第三方仓库省却了仓库的搭建过程,但要忍受网路不稳定、jar包公开化等弊病。

搭建私有仓库是一个很好的选择,我在《从0到1实战微服务架构》的Maven私有仓库一节中介绍了使用Nexus搭建私有仓库的方案。

对于规模中等的公司,搭建私有仓库是一个好的选择。但对于小的团队就不见得如此了:开发人员一只手数的过来,依赖的包也不过十几个,维护一套Nexus实在是有些浪费。

今天我们介绍一种新的方案:使用git仓库作为maven仓库,当然是在gradle中,maven的话可以照葫芦画瓢,这里不再赘述。

先说说整体思路:

  1. 创建一个全新的git repo
  2. clone到本地pathA
  3. 发布pom包到本地pathA
  4. 本地提交到远程git
  5. 引用远程git repo的http页面作为maven源

看到这你可能觉得有点绕,为什么要经过本地这一步呢,直接提交到远程不好么?

事实上我也考虑过这一方案,使用过各种插件,不仅存在各种奇怪的版本兼容问题,各种配置也异常复杂,难以维护。

相反:Gradle的maven插件原生支持发布到本地路径,配置非常简单,再结合几行简单的git命令,看似很长的步骤,却非常顺畅。

好了,我们一起来看实战吧!

1 创建全新的git repo 并克隆到本地

你可以使用自己喜欢的托管服务,甚至自己的git服务器,我这里使用的是gitee

  • 仓库名称不妨叫maven_repository
  • 克隆到本地假设是/home/coder4/maven_repository/

2 新建一个gradle项目

不再赘述,你应该已经有一个了。

在主文件中添加引用

apply from: './maven-private.gradle'

3 新建私有镜像gradle配置文件maven-private.gradle

// Maven Private Repo
repositories {
    maven { url 'https://gitee.com/coder4/maven_repository/raw/master/' }
}

// Maven Private Deploy
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file:///home/coder4/maven_repository/")
        }
    }
}
  • 上面的url是git仓库可访问的http路径,要说明的是,如果你是私有镜像的话,需要再多绕一步,文末我会讲到,不要着急。
  • 下面file:///开头的是maven本地clone的路径。

这些路径可能会变化,可以作为变量:

~/.gradle/gradle.properties

MAVEN_PRIVATE_URL = https://gitee.com/coder4/maven_repository/raw/master/
MAVEN_LOCAL_PATH = /home/coder4/maven_repository
// Maven Private Repo
repositories {
    maven { url MAVEN_PRIVATE_URL }
}

// Maven Private Deploy
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://${MAVEN_LOCAL_PATH}" )
        }
    }
}

4 发布和上传

# 发布到本地
gradle uploadArchives
# 提交到git仓库
cd pathA
git add . && git commit -m "upload pom" && git push origin master

5 别的项目引用时候

直接写就可以

compile 'com.coder4.lmsia:trace:0.0.1'

6 私有仓库怎么办

前面也提到了,有时候你可能希望使用私有仓库,毕竟jar包都是可以反编译的:-)

  • 此时就要多一个步骤了
  • 本地提交后,依然上传到git仓库
  • 新建一台Web服务器,只对内网有访问权限,定期(或者Hook)从git仓库更新到本地
  • 然后在maven-private.gradle中更改url为这台web服务器,即可。

比起维护一套Nexus还是简单很多的~

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *