使用 GitHub 作为 Maven 仓库


使用 GitHub 作为 Maven 仓库

GitHub 示例

场景

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

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

创建一个 maven 项目上传到 github

这是初始的 pom.xml

<!-- 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 了

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 插件

主要是设置部署目录

<!-- 其他内容。。。 -->
<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_。

<!-- 其他内容。。。 -->
<servers>
  <server>
    <!-- id,这只是一个标识名,根据它找到用户名和密码 -->
    <id>github</id>
    <!-- github 用户名 -->
    <username>rxliuli</username>
    <!-- github 密码 -->
    <password>123456</password>
  </server>
</servers>
<!-- 其他内容。。。 -->

添加插件 com.github.github

<!-- 其他内容。。。 -->
<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>
<!-- 其他内容。。。 -->

进行部署

使用命令进行部署

mvn clean deploy

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

使用

添加仓库地址

<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,自然可以直接使用啦

 <dependency>
   <groupId>com.rxliuli</groupId>
   <artifactId>maven-repository-example</artifactId>
   <version>1.0-SNAPSHOT</version>
 </dependency>

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


文章作者: rxliuli
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 rxliuli !
 上一篇
layui-layer load 弹窗自动关闭的问题 layui-layer load 弹窗自动关闭的问题
layui-layer load 弹窗自动关闭的问题场景项目中的 Ajax 加载时的 loading 框有时候会关闭了弹窗之后很久页面上的数据才加载出来,而且这个问题是随机出现的,有些页面存在,有些页面则正常。 最小复现代码 <!DO
2019-04-12 rxliuli
下一篇 
程序员对 996 的反抗引来全球关注,它是如何以程序员自己的方式建立起来? 程序员对 996 的反抗引来全球关注,它是如何以程序员自己的方式建立起来?
程序员对 996 的反抗引来全球关注,它是如何以程序员自己的方式建立起来? 转自: https://m.douban.com/note/712945658/?dt_dapp=1,原文应该来自 好奇心日报,但目前已被删除。国内的各大互联网公司
2019-04-07 rxliuli
  目录