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类型的解析来验证。
如果没有自己的域名也可以使用公共的代码管理服务平台来域名来命名,例如下图:
可以使用io.github.myusername,io.gitlab.myusername等。只需要做一下简单的验证。例如io.github.myusername,你必须创建一个审批过程中给定的一个ticketnumber,在自己的项目中创建对应的项目,例如:github.com/myusername/OSSRH-TICKETNUMBER ,这个路径可以访问就可以(公开库,否则无法访问),注册完成就可以删除。
仓库:不一定非要是公开的库,审批过程只是上面提到的项目验证,来验证你是否真有这个库的所有权。
以上了解后就可以先申请账号,申请注册地址
【第一步】点击登录框下方的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菜单可以看到你的最近提交。
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。
【需要说明几点】:
- 就是单个文件不能超过1024M,如果超过需要联系管理员来上传。
- 还需要注意的是release版本一旦上传部署后将不允许更新、修改、删除,只能上传新的版本。
- -SNAPSHOT作为版本号结尾不会直接上传至正式的中央仓库,而是上传至成功部署的 SNAPSHOT 版本将上传至 https://s01.oss.sonatype.org/content/repositories/snapshots/
- 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/。
如果你觉得上传没有问题,点击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引用的漏洞修复,终于没有问题了。
确认无误后就可以点击Release了。
对于不需要发布的包的处理
可在maven plugins配置中添加如下设置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
可以跳过发布,就不会上传至资源库中。