前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文读懂jar上传至Maven中央仓库

一文读懂jar上传至Maven中央仓库

作者头像
叔牙
发布2024-06-26 11:03:15
1950
发布2024-06-26 11:03:15
举报
文章被收录于专栏:一个执拗的后端搬砖工

内容目录

一、背景概述二、sonatype配置三、GPG验证配置四、上传&发布jar包五、总结

一、背景概述

很多时候我们更多的是从maven中央仓库依赖和下载相关jar,但是这些都是通用性的繁华使用,但是有时候自己或者团队编写或者封装了一些好用的组件,那就需要维护一个私有仓库,对于一些非敏感的项目组件,放私有仓库并不是必须的。换个角度思考一下,如果自己的jar能够放到中央仓库,是不是可以随时随地的可以依赖使用,别人也可以使用了呢?

对于将jar包发布到maven中央仓库有以下优缺点提供参考。

优点
  • 全局可用性:

一旦你的Jar包被上传到Maven中央仓库,任何使用Maven、Gradle或其他兼容工具的开发者都可以轻松地添加你的库作为依赖项。这大大提高了软件包的可发现性和使用量。

  • 标准化和安全性:

Maven中央仓库有严格的发布标准和验证步骤,用户上传发布jar包需要遵守相关规范,确保其发布的库具有一定的质量和安全性。用户可以更放心地使用这些库。

  • 版本控制:

Maven中央仓库支持详细的版本控制,允许用户方便地访问不同版本的库,并且能很好地管理依赖关系。

  • 社区认可:

将库发布到Maven中央仓库可以提升项目的声誉和可信度。它表明你的项目达到了公开发布的标准,并且愿意与社区分享,共同打造更优质的技术组件。

  • 依赖管理简便:

使用Maven中央仓库,开发者可以轻松地管理依赖关系,自动处理库之间的依赖冲突和版本升级问题。

缺点
  • 发布流程繁杂:

将Jar包发布到Maven中央仓库需要遵循严格的流程,包括签名、验证和审核。这对新手来说可能有些复杂并且耗时,有一定的技术门槛并且需要一定的学习能力。

  • 不可逆:

一旦发布到Maven中央仓库,通常无法删除或修改已经发布的版本。意味着你必须非常谨慎地进行版本管理,因为一旦发布,错误的版本会永久存在。

  • 隐私和版权问题:

所有发布到Maven中央仓库的库都是公开的。如果你不希望某个库或代码公开,或者这个代码组件是企业或者团队内部私有财产,那么Maven中央仓库就不适合。此外,还需要确保没有侵犯第三方的版权或违反开源协议。

  • 维护成本:

一旦你的库被广泛使用,你就需要承担相应的维护责任。用户可能会报告问题、请求新功能,或者需要技术支持,这会增加你的维护成本。

  • 审核过程:

发布到Maven中央仓库的过程包括审核和验证,这可能导致延迟。如果发布的库没有通过审核,还需要进行修改和重新提交。如果需要支持比较急切的线上版本替换,那么将会带来时间上的延迟。

总之,将Jar包上传到Maven中央仓库有助于提高库的可见性、可信度和易用性,但也带来了发布流程复杂、维护成本增加等挑战。在决定是否将库发布到Maven中央仓库时,需要权衡这些优缺点,确保做好充分的准备,并了解发布和维护过程中的各项要求。

本篇文章讲着重于介绍如何从零到一将jar包发布到maven中央仓库,至于应该发布什么样的jar以及其他内容,本篇付暂不涵盖。

二、sonatype配置

1.注册账号

想要发布jar到中央仓库,需要有sonatype账号,如果已经注册过了,直接登录即可,否则按照要求注册账号:

2.添加namespace

注册登录完成后,需要创建namespace,也是管理jar包的命名空间,并且和个人仓库绑定。

如果是国内的gitee,那么就填入io.gitee.xxxx,如果是github就填入io.github.xxxx.

3.验证namespace

创建完namespace属于未验证状态,只有验证状态的namespace才可以发布jar。

点击验证namespace

大致意思是需要在自己的账号中创建名称为Verification Key的仓库,这样才能证明这个namespace属于你,以及namespace和代码仓库的一致性。

按照要求创建仓库后,点击confirm过一会会出现verified标记,这样namespace就可以正常使用了。

4.创建推送账密

账密是用来推送你的jar包到中央仓库里面去,要保存好,只有在创建成功的时候才会显示一次。

点击右上角用户账号:

点击生成用户token:

复制出来内容如下:

代码语言:javascript
复制
<server>
  <id>${server}</id>
  <username>xxxxxx</username>
  <password>xxxxxx</password>
</server>

把内容粘贴到maven的配置文件settings.xml中,${server}可以自定义。

三、GPG验证配置

GPG,全称为GNU Privacy Guard,是一个开源的加密软件,基于OpenPGP标准(RFC 4880)。它可以用于加密和解密数据、签名和验证数据,以及管理加密密钥。

此处的GPG用于创建asc文件用于验证你的代码文件的正确性和安全性等。

1.下载安装GPG

到官网https://gnupg.org/download/index.html 下载,可以针对自己操作系统选择对应的安装包,比如macos选择Mac GPG下载即可。

下载好使用dmg文件根据提示进行安装。

2.秘钥配置

生成gpg秘钥

在终端输入:

代码语言:javascript
复制
gpg --gen-key

根据提示输入真实姓名、邮箱(与git仓库邮箱一致),回车生成秘钥,此处会弹出弹框需要输入秘钥密码(后续上传jar会使用到)。

生成的pub对应的内容就是秘钥id。

发布gpg秘钥

使用gpg命令上传秘钥到maven中央仓库,这样仓库持有了你的秘钥才能验证你的身份:

代码语言:javascript
复制
gpg --keyserver keyserver.ubuntu.com --send-keys xxxxxx

验证gpg秘钥

有两种方式可以验证秘钥,一种是通过gpg命令:

代码语言:javascript
复制
gpg --keyserver keyserver.ubuntu.com --recv-keys xxxxxx

出现以上内容表明秘钥发布成功。

另外一种方式直接到https://keyserver.ubuntu.com/秘钥平台查询:

如果能够查询到,也说明秘钥发布成功了。

四、上传&发布jar包

想要把jar上传到sonatype平台,需要修改项目的配置文件。

1.修改项目pom文件

添加license信息,此处我们使用apache 2.0协议:

代码语言:javascript
复制
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>

添加开发者信息:

代码语言:javascript
复制
<developers>
    <developer>
      <id>typhoon</id>
      <name>Typhoon</name>
      <email>xxxxxx@gmail.com</email>
      <roles>
        <role>Project Manager</role>
        <role>Architect</role>
      </roles>
    </developer>
  </developers>

添加scm代码管理信息:

代码语言:javascript
复制
<scm>
    <connection>https://github.com/ScorpioAeolus/distribute-uid.git</connection>
    <developerConnection>scm:git:ssh://git@github.com:ScorpioAeolus/distribute-uid.git</developerConnection>
    <url>https://github.com/ScorpioAeolus/distribute-uid</url>
  </scm>

添加plugin插件:

代码语言:javascript
复制
<build>
    <plugins>
      <!--   central发布插件    -->
      <plugin>
        <groupId>org.sonatype.central</groupId>
        <artifactId>central-publishing-maven-plugin</artifactId>
        <version>0.4.0</version>
        <extensions>true</extensions>
        <configuration>
          <publishingServerId>typhoon</publishingServerId>
          <tokenAuth>true</tokenAuth>
        </configuration>
      </plugin>
      <!--   source源码插件 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.2.2</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-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <!--   javadoc插件 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.9.2</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.6</version>
        <configuration>
          <executable>/usr/local/bin/gpg</executable>
          <keyname>Typhoon</keyname>
        </configuration>
        <executions>
          <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
              <goal>sign</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

对于gpg插件需要填写命令绝对路径。

2.打包上传jar

打包上传也有两种方式,一种是点击右侧maven面板中的生命周期命令。

先点击clean,然后再点击compile,前两步没有问题后,点击deploy。

第一次点击deploy会弹出秘钥密码输入框:

按照提示输入秘钥密码即可。

还有一种方式是在终端执行mvn命令:

代码语言:javascript
复制
mvn -U clean compile deploy -Dmaven.test.skip=true

首次执行按照提示输入秘钥密码既可。

3.问题解决

前一步执行完deploy后报错:

到sonatype平台看到如下报错内容:

有两个报错,一个是namespace不允许,说明项目pom中groupId与sonatype中namespace不一致,改成一致即可。

还有一个报错是SNAPSHOT不被允许,也就是不允许快照包发布到中央仓库,改成RELEASE包或正式包即可。

代码语言:javascript
复制
  <groupId>io.github.scorpioaeolus</groupId>
  <artifactId>distributed-uid</artifactId>
  <version>1.0.0.RELEASE</version>

重新执行deploy成功:

4.发布jar包

jar上传成功后,只是暂存于sonatype平台,并没有真正发布到maven中央仓库。

点击publish进行发布:

发布后,sonatype会通过一系列校验和审核,没有问题后就会发布成功,整个过程大致>10mins。

5.测试验证

发布成功后我们可以在仓库进行搜索:

可以找到刚刚上传发布的jar包。

点击进入详情:

可以看到依赖代码块,这样就可以像apache common-langs、springboot等公共依赖包一样,在任何机器、任何角落去依赖下载jar包了。

我们新建一个maven项目,在pom中添加依赖:

代码语言:javascript
复制
<dependency>
    <groupId>io.github.scorpioaeolus</groupId>
    <artifactId>distributed-uid</artifactId>
    <version>1.0.0.RELEASE</version>
</dependency>

刷新maven依赖,重新下载依赖jar包信息可以看到:

五、总结

对于一些工具性的组件,发布到maven中央仓库,来解决私有仓库搭建和存储成本,实现随时随地随处使用,是一个不错的选择,然而万事有利有弊,如果项目中涉及到隐私和知识产权问题,甚至是公司或者团队内部的私有财产,放到maven中央仓库是比较致命的,不可逆,除非你有能力联系到官方团队让他们撤回或者删除。

也希望本篇文章给想要发布一些开源工具组件的朋友们提供一些参考。不当之处,请斧正。

https://central.sonatype.com/

https://gnupg.org/download/index.html

https://github.com/ScorpioAeolus/distribute-uid

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PersistentCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景概述
    • 优点
      • 缺点
      • 二、sonatype配置
        • 1.注册账号
          • 2.添加namespace
            • 3.验证namespace
              • 4.创建推送账密
              • 三、GPG验证配置
                • 1.下载安装GPG
                  • 2.秘钥配置
                    • 发布gpg秘钥
                    • 四、上传&发布jar包
                      • 1.修改项目pom文件
                        • 2.打包上传jar
                          • 3.问题解决
                            • 4.发布jar包
                              • 5.测试验证
                              • 五、总结
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档