使用 GitHub 作为 Maven 仓库

使用 GitHub 作为 Maven 仓库

GitHub 示例

场景

吾辈在日常工具中也有一些公共的代码库,一直想分离成单独的类库却没有机会,看到使用 github 就能部署 maven 仓库就尝试了一下。

这里吐槽一下 maven 中央仓库的发布流程,不知道为什么不能像 npm 一样一个简单的命令就能发布多好!

创建一个 maven 项目上传到 github

这是初始的 pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- pom.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<!-- 项目的组织名,如果没有域名或组织的话就是用 com.github.[你的用户名] -->
<groupId>com.rxliuli</groupId>
<!-- 项目的名字 -->
<artifactId>maven-repository-example</artifactId>
<!-- 版本号,默认是 1.0-SNAPSHOT -->
<version>1.0-SNAPSHOT</version>
</project>

添加一个忽略配置 .gitignore 就可以上传到 GitHub 了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar

# 忽略 IDEA 配置文件
*.iml
.idea/
rebel.xml

修改 maven-deploy-plugin 插件

主要是设置部署目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- 其他内容。。。 -->
<build>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<!--设置部署目录-->
<altDeploymentRepository>
internal.repo::default::file://${project.build.directory}/mvn-repo
</altDeploymentRepository>
</configuration>
</plugin>
</plugins>
</build>
<!-- 其他内容。。。 -->

在 settings.xml 中添加 github 用户信息

找到 maven 用户配置文件,默认位置在 ~/.m2/settings.xml。如果不存在,则从 maven 安装目录复制一份过来,具体位置在 _MAVEN_HOME/conf/settings.xml_。

1
2
3
4
5
6
7
8
9
10
11
12
<!-- 其他内容。。。 -->
<servers>
<server>
<!-- id,这只是一个标识名,根据它找到用户名和密码 -->
<id>github</id>
<!-- github 用户名 -->
<username>rxliuli</username>
<!-- github 密码 -->
<password>123456</password>
</server>
</servers>
<!-- 其他内容。。。 -->

添加插件 com.github.github

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!-- 其他内容。。。 -->
<properties>
<!-- 设置 github 服务器使用的配置,在 ~/.m2/settings.xml 中定义 -->
<github.global.server>github</github.global.server>
</properties>

<build>
<plugins>
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<!--
这里需要使用 0.12, 0.9 部署时会出错,具体查看
https://github.com/github/maven-plugins/issues/105
-->
<version>0.12</version>
<configuration>
<!--git 提交的消息-->
<message>Maven artifacts for ${project.version}</message>
<!--禁用网页处理-->
<noJekyll>true</noJekyll>
<!--部署的目录,这里是和上面的 maven-deploy-plugin 的 configuration.altDeploymentRepository 对应-->
<outputDirectory>${project.build.directory}/mvn-repo
</outputDirectory> <!-- matches distribution management repository url above -->
<!--远程分支名-->
<branch>refs/heads/mvn-repo</branch>
<includes>
<include>**/*</include>
</includes>
<!--github 仓库的名字-->
<repositoryName>maven-repository-example</repositoryName>
<!--github 用户名-->
<repositoryOwner>rxliuli</repositoryOwner>
</configuration>
<executions>
<execution>
<goals>
<!--suppress MybatisMapperXmlInspection -->
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- 其他内容。。。 -->

进行部署

使用命令进行部署

1
mvn clean deploy

查看 github 项目库,可以看到已经自动创建了一个分支 mvn-repo 并存放了部署后的文件。

使用

添加仓库地址

1
2
3
4
5
6
7
8
9
<repositories>
<repository>
<id>maven-repository-example</id>
<!-- 格式是 https://raw.githubusercontent.com/[github 用户名]/[github 仓库名]/[分支名]/repository -->
<url>
https://raw.githubusercontent.com/rxliuli/maven-repository-example/mvn-repo/repository
</url>
</repository>
</repositories>

就像其他 maven 仓库一样,我们知道 groupId, artifactIdversion,自然可以直接使用啦

1
2
3
4
5
<dependency>
<groupId>com.rxliuli</groupId>
<artifactId>maven-repository-example</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

注: 这种使用 github 部署的 maven 仓库,在 maven 中央仓库 中并不能搜索到的哦