一旦眼神变得黯淡,灵魂也会失去光辉。
——「从零开始的异世界生活」
前期准备
- Github 账号
- Git
- Maven Central 账号
- Jetbrains Intellij IDEA 2024.2.0.2(这是我的版本)
- Maven
- 一个自己的域名
对于上述内容怎么获取或怎么安装,本文章就不进行概述。
注意:这篇文章需要一个自己的域名,如果是期望使用免费域,如 github.io 可以参考其他站点的配置方法
Maven Central
注册 Maven Central
访问地址:https://central.sonatype.com/
没有注册账号,需要注册一个新的账号。
对了,这一篇文章是 2024 年版本的,旧版上传到 Maven 中央仓库的已经失效了,这里就放最新版本的内容。如果有些东西还想参考旧版的话,自行搜索 CSDN 之类的网站吧。
添加命名空间(Namespace)
我这里使用 cloudflare 进行举例,我的域名是在 aliyun 购买的,由于阿里云 DNS 那玩意比较哈批。我就丢到了 cloudflare。
在 cloudflare 里面,DNS 记录,添加一个根 TXT 类型的记录。
他的审核需要一定的时间周期,可能是一两天,这里我没有仔细注意到。
后面就需要等待 Namespace 的审核(Verification Pending),审核完毕后,会显示 Verified 字样,就代表审核完毕了。
配置签名
你可能在犹豫为什么需要这个。没办法,Maven Central 发布 Java 库到中央仓库的时候要求你的发布者需要鉴别身份,所以需要进行 GPG 密钥验证。如果验证通过才允许你继续上传,否则会被拒绝上传。
⬆️ 我原本打算想配置 Github Action 的自动部署策略,但是自动部署的 Action,我不是很清楚如何将自己的密钥部署到 Action 服务器,我用过了一些 Action 部署 GPG 签名的一些 Action 包,但是没有效果。显示就是找不到关于我导入的密钥,不知道是不是 Action 包只对 git 上传做了处理,而没有对 gpg 相关内容做了处理。后面我就放弃了通过 Github Action 进行自动部署,后面有缘的话再搞一次。
配置 GPG 签名
我这里以我 MacOS 为例,Windows 系统请参考下面链接进行安装 GPG 签名工具
对于 MacOS(Unix) 系统来说相对而言很简单了。打开终端
等待安装完毕即可(对了,如果你的 mac 电脑没有安装 brew 的话,可以参考这个网站即可安装:https://brew.sh/zh-cn/ ;如果默认源比较慢的话,可以参考清华大学镜像站切换清华大学的镜像源后进行下载安装)。
安装完毕后,输入 gpg 即可验证 gpg 是否安装成功
接着,进行创建 gpg 密钥(可参考 Github 文档)
随后一直回车接受默认值即可(如果 windows 弹出来需要输入密码,可以直接回车或者确定下一步,可以创建不含密码的 GPG 密钥)
正常来说 GPG 密钥应该设置密码的,但是我嫌麻烦不喜欢设置密码。你能够保证你的 GPG 密钥不泄露你就可以大胆尝试一下😂
上传 GPG 签名到服务器
获取你创建的 gpg 签名信息
随后,可以获取到一长串 key 那一串 key 就是要上传到 GPG 服务器的密钥,这样后续 Maven Central 进行签名认证的时候可以从服务器获取信息进行签名校验。
1
| gpg --keyserver keyserver.ubuntu.com --send-keys C3A00000000000000000000000000000000BFA87
|
另外,如果这个 keyserver
无法连接,可以有下面的三种可以选择
- keyserver.ubuntu.com
- keys.openpgp.org
- pgp.mit.edu
上传后,你可以在上面的三个连接中打开输入自己的 keys 进行查询签名信息。
创建项目
这里使用的是 Jetbrains Intellij IDEA 2024.2.0.2 版本进行演示
创建完毕后,需要配置 Maven 的相关信息(在 pom.xml 位置)
在这里,我放出我的配置文件,以下配置文件为必须配置文件,Maven 中央仓库要求这些内容都存在后才允许发布到中央仓库。(可以参考修改)
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" 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>
<groupId>com.x-lf.utility</groupId> <artifactId>springboot-util</artifactId> <version>1.0.0</version> <description>筱锋 SpringBoot 开发架构仓库</description> <url>https://github.com/XiaoLFeng/springboot-util</url>
<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
<developers> <developer> <name>XiaoLFeng</name> <email>gm@x-lf.cn</email> </developer> </developers>
<licenses> <license> <name>MIT</name> <url>https://opensource.org/licenses/MIT</url> </license> </licenses>
<scm> <connection>scm:git:github.com/XiaoLFeng/springboot-util.git</connection> <developerConnection>scm:git:github.com/XiaoLFeng/springboot-util.git</developerConnection> <url>https://github.com/XiaoLFeng/springboot-util</url> </scm>
<distributionManagement> <repository> <id>ossrh</id> <name>Central Repository OSSRH</name> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement>
<build> <plugins> <plugin> <groupId>org.sonatype.central</groupId> <artifactId>central-publishing-maven-plugin</artifactId> <version>0.4.0</version> <extensions>true</extensions> <configuration> <publishingServerId>central</publishingServerId> <tokenAuth>true</tokenAuth> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9.1</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.5</version> <configuration> <executable>gpg</executable> </configuration> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> </plugin>
</plugins> </build>
</project>
|
在这里配置好后,接下来你就可以写自己的第三方库,写好后就进行下一步,准备发布内容到 Maven Central
准备发布到 Maven Central
如果你已经基本完全准备好了,就可以准备将你的库上传到 Maven Central 上。
打开 Maven Central 网站,登录账号后,点击 View Account
点击此处生成令牌信息,令牌会给你创建一个用户名和密码,这一个用户名和密码需要部署在自己的 Maven 的 setting.xml 里面。
找到你的 Jetbrains Intellij IDEA
的设置,查看此处的文件所在位置并且打开
在大部分情况下,如果你没有进行 Maven 系统配置过的话,那么你打开文件夹后是不存在 settings.xml 这一个文件的,这个时候,你就需要创建一个新的文件,并且命名叫做 settings.xml
这是参考的配置文件信息,您可以复制到您的文件里面进行修改,修改完毕后保存即可。
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
| <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<activeProfiles> <activeProfile>central</activeProfile> </activeProfiles>
<profiles> <profile> <id>central</id> <repositories> <repository> <id>central</id> <url>https://repo1.maven.org/maven2</url> </repository> </repositories> </profile> </profiles>
<servers> <server> <id>central</id> <username></username> <password></password> </server> </servers> </settings>
|
有一个注意点,这里的 settings.xml
的 profile
配置中所使用的 id
为 central
,那么,在你的项目 pom.xml
中,也需要保持内容一致
发布到 Maven Central
当你的项目写完之后就可以进行版本发布,发布到 Maven Central。这样别人也可以直接用你的库啦。
成功推送后,你还需要在官网 https://central.sonatype.com/publishing/deployments 点击“Publish”正式发布。然后就可以在中央仓库搜索到自己的组件了。其他镜像库,比如 阿里、mvnrepository.com 等大概四个小时左右就会同步。
结尾
这个还是我整了很多文章最后写出来的结果。毕竟 Maven Central 操作方式跟 2023 年不太一样了,网上也有很多办法不是很有用,这还算是自己摸索出来的一篇内容。图片里的 springboot-util 是我未来上传到 Maven Central 的第三方库,是为了简化我对很多 SpringBoot 初始化配置过多太麻烦而进行的一系列操作。
也许你们可能用不习惯或者没用过,这属于我自己的开发习惯总结出来的一些公共内容,后续的话也会开源在上述 xml 里的 github 地址。