手把手教你将自己的项目发布到 Maven centra

手把手教你将自己的项目发布到 Maven centra

精选文章moguli202025-05-30 19:37:523A+A-

自己写了个开源小工具,我们要如何发布到公网上去,让其他人可以通过依赖引入项目中么?

让我们一起来一步一步地将自己的项目打包发布到 Maven central 中吧。

提示这篇文章比较长,图片也比较多,是我在尝试过程中一步一步的截图下来的,保证每一步都可以执行成功。

因为内容比较多,您可以收藏,按需搜索查看内容!



首先要准备下自己的group id

Group id 是用来指定我们项目包的归属的。这个id可不是随便写的哦。

我们要自定义group id的话,得要有一个自己的域名,这个域名反过来就是你可以管理的group id。

比如我们常用的springboot,他持有域名 boot.springframework.org,就可以在Maven central注册group id,域名反转过来:org.springframework.boot。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>


不过买域名毕竟得要钱,如果对group id的用词没那么执着的话,我们还可以用托管仓库创建自己的group id,比如github、gitee之类的,下面我会用gitee作为一个例子试试看。


注册 Maven central

打开
https://central.sonatype.com
在右上角点击 Sign In

在新的窗口中点击 Sign up

在注册页面中填写自己的用户名和邮箱,记得用户名不能有特殊字符、但是密码得有特殊字符还要很长……

Continue 之后,会收到一封要求确认的邮件,标题是【Verify your email for central-portal】,长这样的

点击 Confirm My Account 之后就会显示校验成功。之后就可以再次打开
https://central.sonatype.com
,点击右上角的 Sign In输入用户名密码就可以登录成功了。

创建 Maven group

登录
https://central.sonatype.com
后,点击右上角的用户头像,然后选择 View Namespace

这里的namespace就是我们的group,点击 Add Namespace 添加一个新的Group

我们用gitee的账号来构建自己的namspace。如果有过用gitee或者github搭建自己的静态博客的经验,就会知道这个io域名对应的就是博客客的地址域名。比如我的gitee账号是 luoyuan800, 我可以填的id就是图中的这个:

要注意的是,这里的id不能有特殊字符,比如下划线横线之类的。我一开始gitee的用户名是gavin_luo,还得改名后才能使用……

gitee用户名指的是你仓库(空间)的地址id,不是显示出来的用户名:

如果需要改名的话,可以去设置\个人资料\个人空间地址里面修改:

在 Maven central 填写id,点击创建后,就可以看到 group id 是 Unverified的状态。

点击 Verify Namespace 后就会弹出如何进行校验的内容了。

要求很简单,就是在gitee对应账号空间下面,创建一个新的仓库,要求是public的,并且名字就是那一串字符。校验完成后,可以删除掉这个仓库。这样的做法就是为了确保你有这个账号的管理权限。

创建好仓库后,点击 Confirm, 就可以看到状态改变成校验进行中了。

等过了一小会,刷新后就可以看到 Namespace 的校验成功的状态。

配置本地的 Maven deploy jar 包到 Maven central

如果大家用过 Maven,应该会知道 Maven deploy 就是用来deploy自己的jar包的,如果要让这个命令能将jar 包deploy到 Maven central,我们需要配置好我们自己的 Maven settings.xml.

settings.xml 一般是放在 user 目录下的.m2文件夹下面,和 repository 同一层。如果没有的话,那你肯定用的是 Maven 自带的配置,在 Maven的安装目录下找 lib\maven3\conf\。如果实在找不到,可以搜索一下。

打开 settings.xml 后,找到 <servers> 标签,往里面添加一个新的 <server> 配置:

这里的usernamepassword怎么来的呢?请看下一步……

创建 deploy用的username、password

我们需要一个deploy用的token来将本地的jar deploy到 Maven central。这个token包含 username 和 password。现在我们来创建这个token。

在登录成功后的页面的右上角,点击账号的图标:

选 View Account 之后就会跳转到 Setup Token-Based Authentication 的页面。

点击 Generate User Token 在弹出的窗口上点击 Ok,就可以看到生成的token,这个token只会出现一次,所以一定要马上保存下来,包括那个要放到 setting.xml 里面的server config 里面,id可以自己修改。

如果不小心没保存到,或者发现自己的密码泄露了,可以先 RevokeUser Token 再重新 Generate User Token.

下载 gpg

GPG是GnuPG,一个提供文件签名和认证的工具包。Maven central 需要校验我们的上传的jar包,所以我们需要对自己的jar包进行签名。而GPG就是官方推荐的工具,因为它包含了生成密钥、上公钥、用私钥签名的全套功能。

打开网址:
https://gnupg.org/download/index.html
找到 GnuPG binary releases 下载符合我们操作系统的安装包。

下载后直接安装,这个安装程序会自动帮我们配置好环境变量,所以安装完成后我们可以打开一个新的命令行窗口,用 gpg --version 校验一下version:

然后使用 gpg --gen-key 命令来生成我们的密钥。

输入 Real nameEmail address 之后,会弹出一个密码输入框,这个密码我们后续要进行签名的时候要配置到 Maven settings.xml中的。

点击 OK 后,还需要在命令行输入 O 确认一次,就可以生产我们自己的密钥对了

拷贝生成出来的public key (公钥), 也就是 pub后面第二行的的那一串字符,用命令 gpg --keyserver keyserver.ubuntu.com --send-keys <public_key> 将我们的公钥上传到公钥服务器。

这里简单解释一下,我们用gpg生成的密钥对包含一个公钥一个私钥,公钥是可以发布出去的,而私钥是不能公开的。我们用私钥进行签名,将自己的文件发给别人,别人可以用公钥进行校验,以确保这个文件就是你的。所以我们需要将公钥发布出去,这里我们用的 keyserver.ubuntu.com 就是一个公钥仓库,是 Maven central 支持使用的公钥服务列表中的一个。

公钥发布后,可能需要等个几分钟,才会真正的发布成功,而我们可以通过命令校验:

配置 GPG 到 Maven settings.xml中

为了让 Maven 能执行签名程序,我们需要将GPG相关的参数配置到 settings.xml 中,找到 <profiles> 标签,新增加一个gpg相关的<profiles>:

  • 这里的passphrase就是这生成密钥对的时候填写的密码
  • executable 是 gpg 的可执行文件目录
    <profile>
      <id>central</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <gpg.executable>D:\Program Files\GnuPG\bin\gpg</gpg.executable>
        <gpg.passphrase>xxxxx</gpg.passphrase>
      </properties>
    </profile>

配置 Maven deploy 相关的插件到项目的 pom.xml 中

完成了前面的配置后,我们就可以开始弄我们自己的项目了!

需要在项目的pom.xml中配置打包的时候需要怎么做。因为要上传到Maven cenral 的项目包,除了需要正常可以用的jar包,还需要上传java doc、source code,并且需要用 GPG 签名。我们需要配置这些东西在跑 Maven 命令的时候一起做。

配置可以生成 javadoc的插件 (build plugins)。

pom.xml中添加 <build>,然后在build里面添加 <plugins>,再在 plugins里面添加 javadoc的plugin,这里的version可以自己调整使用最新的:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.10.0</version>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

打包source code的 plugin。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>3.3.1</version>
    <executions>
        <execution>
            <id>attach-sources</id>
            <goals>
                <goal>jar-no-fork</goal>
            </goals>
        </execution>
    </executions>
</plugin>

GPG签名的 plugin

如果本地有多个密钥对,你需要在<execution> 下面添加额外的 <configuration>标签来指定使用哪一个key name,可以参考
https://central.sonatype.org/publish/publish-maven/#gpg-signed-components
这里就不展开来说了。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <version>3.2.5</version>
    <executions>
        <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Deploy 包到 maven central 的 plugin

这里 <configuraton> 标签里面的 publishingServerId 要和 settings.xml 里面配置的一样。

<plugin>
    <groupId>org.sonatype.central</groupId>
    <artifactId>central-publishing-maven-plugin</artifactId>
    <version>0.7.0</version>
    <extensions>true</extensions>
    <configuration>
        <publishingServerId>central</publishingServerId>
        <autoReleaseAfterClose>true</autoReleaseAfterClose>
    </configuration>
</plugin>

打包部署项目

万事俱备,现在我们可以尝试部署自己的项目啦!

上传到maven central 需要source包、javadoc包、还有class jar包、pom 文件,还有上面这些文件的签名和hash信息,这些都会由我们刚刚配置到 pom.xml里面的 plugins 生成。

直接跑命令: mvn clean deploy

第一次签名需要下载加密的包,因为你懂的原因,会特别慢,甚至会失败。

最后出现Deployment xxxx has been validated 的信息,就表明成功了。


需要注意的是 snapshot 版本不会发布到 maven central,只能在 https://s01.oss.sonatype.org 找到。

只有去掉 snapshot之后才能在maven central上看到,这种算是正式release的版本。Deploy之后 maven central 会根据上传的jar包还有签名、hash进行校验,校验通过后,还需要在网页上点一下publish,才会真正的发布出去。

当然如果你想让 Maven central 自动 publish,省了人手再点一次的步骤,可以在 pom.xml 中的
central-publishing-maven-plugin
<configuration>中添加<autoReleaseAfterClose>true</autoReleaseAfterClose>

试一下引入自己的包



感谢您这么有耐心看完,还请顺手点个赞,加个关注 :)

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2