上传jar包到maven公共远程中央仓库

Open Source Software Repository Hosting 简称 OSSRH
https://central.sonatype.org/publish/
这里简单的介绍了中央仓库。

这里提前说明一下GroupId的选择(Choose your coordinates)

https://central.sonatype.org/publish/requirements/coordinates/
GroupId简单说就像类似java的package,用来唯一定位你的项目。你可以使用你的域名的反转来命名,例如www.springframework.org -> org.springframework,也可以用连字符,但是java中是不允许的,因此java中的包不一定与groupId是一致的。

申请前需要了解的注意的事项:

Group Id:如果是公网的域名,例如com,org等域名相关,需要验证域名,审批过程过程中会给定ticketname,创建一个txt类型的解析来验证。
如果没有自己的域名也可以使用公共的代码管理服务平台来域名来命名,例如下图:


groupId命名

可以使用io.github.myusername,io.gitlab.myusername等。只需要做一下简单的验证。例如io.github.myusername,你必须创建一个审批过程中给定的一个ticketnumber,在自己的项目中创建对应的项目,例如:github.com/myusername/OSSRH-TICKETNUMBER ,这个路径可以访问就可以(公开库,否则无法访问),注册完成就可以删除。

仓库:不一定非要是公开的库,审批过程只是上面提到的项目验证,来验证你是否真有这个库的所有权。

以上了解后就可以先申请账号,申请注册地址

https://issues.sonatype.org

【第一步】点击登录框下方的Sign up

注册

填写相关信息,很简单


填写信息
注册成功

【第二步】登录申请新项目

右上角点击Create,Project选择第一项,有的时候带不出来第二个New Project,可以再选一次Project的选项。

创建项目申请

创建项目申请

下面的选项:
Summary:按你的项目大概一个名字
Description:可以不填。
Group Id:就是maven引入包时的group id,这里需要注意的是如果出现com.xxx,需要有对应的域名才可以申请。并且会要求你添加域名的txt解析。
ProjectURL :项目地址,不带.git的结尾。
SCM url: 带.git 结尾的路径
Username(s):可以添加后续有权限上传这个库的用户,如果只有你自己,那就不需要填写。
Already Synced to Central:选择No。
点击创建。

【第三步】等待审核

在上面Issues菜单可以看到你的最近提交。


issues

Status为提交状态,刚申请为open,下方comments为审核意见。
晚上回复的还是挺快的,基本20分钟左右就会有回复。
可以注意查收邮件,如有收到相关邮件就表明有相关的建议恢复,注意阅读相关建议。

查看提交状态

下图是回复的修改意见截图,一个是项目的验证,一个是域名的验证。验证域名采用txt解析验证,如果有域名则登录对应的域名提供商添加域名解析,解析的txt就是他给出的校验码 OSSRH-xxxxx。

回复的建议

申请修改了或者添加了验证后需要在more重新刷新状态。将状态重新打开为open。

如果验证都没有问题,最后状态为RESOLVED,comments中会发送Congratulations!Welcome to the Central Repository!提示。提示中有相应的教程链接帮助你自动发布包。

开始部署

https://central.sonatype.org/publish/publish-guide/#review-requirements
可以选择不同的部署工具,常用的就是Apache Maven。

【需要说明几点】:

  1. 就是单个文件不能超过1024M,如果超过需要联系管理员来上传。
  2. 还需要注意的是release版本一旦上传部署后将不允许更新、修改、删除,只能上传新的版本。
  3. -SNAPSHOT作为版本号结尾不会直接上传至正式的中央仓库,而是上传至成功部署的 SNAPSHOT 版本将上传至 https://s01.oss.sonatype.org/content/repositories/snapshots/
  4. release版本不能以-SNAPSHOT作为版本号结尾。

配置仓库认证

在本地仓库级别的配置文件中setting.xml添加上面申请的用户名和密码。

<settings>
  <servers>
    <server>
      <id>ossrh</id>
      <username>your-jira-id</username>
      <password>your-jira-pwd</password>
    </server>
  </servers>
</settings>

配置插件

在自己的项目pom.xml中配置,本身已经配置的Maven deploy plugin,可以使用下面配置

<distributionManagement>
  <snapshotRepository>
    <id>ossrh</id>
    <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
  </snapshotRepository>
  <repository>
    <id>ossrh</id>
    <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
  </repository>
</distributionManagement>
....

<plugin>
  <groupId>org.sonatype.plugins</groupId>
  <artifactId>nexus-staging-maven-plugin</artifactId>
  <version>1.6.7</version>
  <extensions>true</extensions>
  <configuration>
     <serverId>ossrh</serverId>
     <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
     <autoReleaseAfterClose>true</autoReleaseAfterClose>
  </configuration>
</plugin>

建议使用The Nexus Staging Maven Plugin

<distributionManagement>
  <snapshotRepository>
    <id>ossrh</id>
    <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
  </snapshotRepository>
</distributionManagement>
<build>
  <plugins>
    <plugin>
      <groupId>org.sonatype.plugins</groupId>
      <artifactId>nexus-staging-maven-plugin</artifactId>
      <version>1.6.7</version>
      <extensions>true</extensions>
      <configuration>
        <serverId>ossrh</serverId>
        <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
        <autoReleaseAfterClose>true</autoReleaseAfterClose>
      </configuration>
    </plugin>
    ...
  </plugins>
</build>

对于需要上传源代码和javadoc的配置

<build>
  <plugins>
    <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>
  </plugins>
</build>

发布测试

可以先使用-SNAPSHOT作为版本号,版本号如果以-SNAPSHOT结尾,执行以下命令将默认上传至snapshot库。

mvn clean deploy

执行后会默认上传以下链接库,可以上去看看自己的库是否上传成功。
https://s01.oss.sonatype.org/content/repositories/snapshots/

本地工程引入测试

可以将自己发布的包clean或者删除资源库的文件夹,然后新建一个测试工程添加指定仓库,添加你的依赖做测试,看是否正常下载。

<repositories>
        <repository>
            <id>nexues</id>
            <name>snapshots</name>
            <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>

如果测试没有问题就可以发布正式版了。

正式版发布

修改版本号

mvn versions:set -DnewVersion=1.0.0

确认版本号更新没有问题,然后执行发布release

mvn clean deploy -P release

https://central.sonatype.org/publish/release/

执行完命令后并没有直接发布,而是发布到临时资源库(staging repository)。

登录资源库

使用OSSRH用户名密码登录到以下链接(从2021 年 2 月开始所有新项目使用这个链接)https://s01.oss.sonatype.org/,如果找不到你的项目那就登录https://s01.oss.sonatype.org/

Staging Repositories

如果你觉得上传没有问题,点击Close,系统会做出评估,会等待一段时间,Release会被激活。
如果存在问题会给重新激活Close按钮,会在Activity中提示问题,并且会对包进行检测发布一些漏洞威胁警告的邮件。


关闭错误

检测报告

可以通过上方的Drop按钮放弃,修正后重新上传。

刚才遇到的问题是没有加签名,以下这几个文件需要对应的签名。
example-1.0.0.pom
example-1.0.0.jar
example-1.0.0-sources.jar
example-1.0.0-javadoc.jar
签名文件
example-1.0.0.pom.asc
example-1.0.0.jar.asc
example-1.0.0-sources.jar.asc
example-1.0.0-javadoc.jar.asc

签名工具下载
安装gpg客户端,可以在控制台验证是否安装成功gpg或者gpg2测试。
安装完成会提示你创建一个证书,按照提示创建证书。

配置maven的setting.xml配置文件,在<profiles></profiles>中添加

  <profile>
      <id>ossrh</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <gpg.executable>gpg2</gpg.executable>
        <gpg.passphrase>the_pass_phrase</gpg.passphrase>
      </properties>
    </profile>

需要重启ide工具(编译时需要gpg命令行),然后重新clean,install,会提示输入证书密码,成功后在对应项目的target目录中生成相应的jar.asc ,pom.asc。

经过几轮的修改,包括证书,javadoc,javasource,jar引用的漏洞修复,终于没有问题了。


closed

确认无误后就可以点击Release了。

对于不需要发布的包的处理

可在maven plugins配置中添加如下设置

         <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

可以跳过发布,就不会上传至资源库中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容