Maven私服毕业攻略

622 阅读3分钟

为什么要使用Maven私服

Maven是笔者在开发中用的最多的仓库, 已经不记得和pom文件做过多少次战斗了

公开仓库里有很多优秀的项目, 但难免会有较为特殊的需求, 它除了需求过分之外, 还有很多module, 甚至同事的项目都进行了引用

传统的jar包方式显示是落后且不优雅的

面对这种情况, 搭建自己或公司的Maven私服显然是最佳解决方案

我知道在网上有许许多多类似的教程和攻略, 但笔者认为它们或多或少都缺少了一些系统性的指引, 亦或是缺少关键步骤的讲解, 自己死磕了接近一整天也拜它们所赐

故, 在这里对如何搭建Maven私服进行一次最为全面和系统的整理与解读

选择搭建方式

总共有三种比较合适的Maven私服搭建方式:

  • Nexus
  • Github仓库
  • Github Packages

三种方式各有特点, 需要各位根据自己的实际情况进行选择, 我来简单列举一下它们的适用的场景:

  • Nexus: 适合公司规模的私服搭建, 教程资源丰富, 管理容易, 但对硬件性能要求较高
  • Github仓库: 个人和公司均适用, 无需搭建, 但项目打包发布需要配置, 且国内访问和速度堪忧
  • Github Packages: 相对于Github仓库更加便捷, 项目打包发布也简便, 但在引入时需要Github认证, 适合使用Github作为开发库的团队

还是那句话, 没有最好的, 只有最合适的

选择好合适的方式后, 来开始我们的表演吧

开始搭建!

Nexus

Nexus网上的教程有太多, 贴一篇我认为不错的

需要注意的是, 新版本的Nexus要想启动必须拥有2G以上内存, 劝退了一众小型云服务器

Github Packages

为什么先说这个呢?因为我的重点在Github仓库

准备工作

在使用Github Packages之前, 我们需要进行如下三步准备工作:

  1. 拥有一个Github账号
  2. 生成一个用于访问的token
  3. 创建一个用于保存的仓库, 我习惯命名为: maven-repo

上面的步骤均可在浏览器进行, 且网上教程很多, 不再赘述

修改Maven配置

我们的Maven一般有两种情况:

  • 本机安装的Maven: 去修改${MavenHome}/conf/settings.xml
  • idea自带的Maven: 创建一个settins.xml, 在idea的Maven设置中进行覆盖

修改<servers>和<profiles>标签

<servers>
    <server>
        <id>服务id</id>
        <username>Github账号名称</username>
        <password>Github访问token</password>
    </server>
</servers>
<profiles>
    <profile>
        <id>github</id>
        <repositories>
            <repository>
                <id>central</id>
                <url>https://repo1.maven.org/maven2</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>服务id, 和server标签中保持一致</id>
                <name>自定义</name>
                <url>https://maven.pkg.github.com/Github账号名称/Github仓库名称</url>
            </repository>
        </repositories>
    </profile>
</profiles>

修改pom文件

在项目的pom文件中, 设置发布参数

<distributionManagement>  
    <repository>    
        <id>服务id</id>    
        <name>自定义</name>
        <url>https://maven.pkg.github.com/Github账号名称/Github仓库名称</url>  
    </repository>
</distributionManagement>

其中<repository>中的内容和上一步maven配置文件中的<server>保持一致

接下来, 只要进行maven的deploy命令, 项目就会自动发布到Github Packages里啦

再次强调, Github Packages的私服, 需要在maven中配置Github的token认证才能使用

如何使用

如果要让其它人使用Github Packages中的依赖, 需要对方拥有Github账号和认证, 并修改Maven配置

然后在pom中直接引入即可

pom引入可参考Github仓库中的方法

Github仓库

重点来了, 这是笔者最后选择的方式

准备工作

  1. 拥有一个Github账号
  2. 生成一个用于访问的token

修改Maven配置

和Github Packages相同, 我们需要修改Maven的配置(用于发布):

<servers>
    <server>
        <id>服务id</id>
        <username>Github账号名称</username>
        <password>Github访问token</password>
    </server>
</servers>

这里会有教程使用Github用户名和密码, 经笔者实际测试, 在使用密码时会报404的错误, 所以老老实实用token吧

修改pom文件

我们总共要做两件事:

  1. 将项目发布到本地Maven仓库
  2. 使用site-maven-plugin自动将仓库同步到Github

选择一个本地路径作为Maven仓库, 要注意加"file:"哦

<distributionManagement>
    <repository>
        <id>Houtaroy Local</id>
        <url>file:本地文件路径</url>
    </repository>
</distributionManagement>

使用site-maven-plugin插件, 进行自动上传

<plugin>
    <groupId>com.github.github</groupId>
    <artifactId>site-maven-plugin</artifactId>
    <version>${site-maven-plugin.version}</version>
    <configuration>
        <!--和上面maven中修改的保持一致-->
        <server>服务id</server>
        <message>Maven artifacts for ${project.artifactId} ${project.version}</message>
        <noJekyll>true</noJekyll>
        <!--本地Maven仓库地址, 和distributionManagement一致, 不需要"file:"-->
        <outputDirectory>本地文件路径</outputDirectory>
        <branch>refs/heads/Github分支名称</branch>
        <includes>
            <include>**/*</include>
        </includes>
        <repositoryName>Github仓库</repositoryName>
        <repositoryOwner>Github用户名</repositoryOwner>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>site</goal>
            </goals>
            <phase>deploy</phase>
        </execution>
    </executions>
</plugin>

完成上面的配置后, 执行maven的deploy命令, 会在本地文件路径中生成文件, 并同步上传到Github仓库

如何使用

要想让其它人使用你的依赖, 我们需要完成:

1.配置私服地址 2.在pom中引入依赖

先配置私服地址, 注意这里和仓库的地址不同, 要在github前增加raw

<repository>
    <id>Spring Boot Koala</id>
    <name>Spring Boot Koala</name>
    <url>https://raw.github.com/Github用户名/Github仓库/Github分支名称/</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy>
    </snapshots>
    <releases>
        <enabled>true</enabled>
    </releases>
</repository>

接下来在pom中引入我们需要的依赖:

<dependency>
    <groupId>cn.houtaroy</groupId>
    <artifactId>spring-boot-koala-starter-mqtt-auto</artifactId>
    <version>2021.1.0-SNAPSHOT</version>
</dependency>

国内网友的坑

国内的小伙伴们在引入依赖时大概率会遇到无法访问raw.github的问题, 还好我们有gitee, 可以采用曲线拯救的方式

使用Gitee作为代理需要如下步骤:

  1. 拥有一个Gitee账号
  2. 在Gitee中导入Github仓库
  3. 定时将Github仓库同步到Gitee

前两步骤不再赘述, 第三步推荐使用Github Actions, 可以参考这位大神的文章

接下来我们只需要修改下私有仓库的地址即可:

<repository>
    <id>Spring Boot Koala</id>
    <name>Spring Boot Koala</name>
    <!--这里的raw位置和github不同哦-->
    <url>https://gitee.com/Gitee用户名/Gitee仓库/raw/Gitee分支名称/</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy>
    </snapshots>
    <releases>
        <enabled>true</enabled>
    </releases>
</repository>