在项目开发过程中,我们常常会使用 Maven / Gradle 从仓库拉取开源的第三方 jar 包,可能是私有仓库,可能是 Maven 中央仓库,也可能是第三方的镜像。本文将一些简单实用的操作步骤和示例,带领大家将自己写好的代码或开源项目发布到 Maven中央仓库(https://mvnrepository.com/)中,让其他人可以直接依赖你的 jar 包,而不需要先下载你的代码 / jar 后 install 到本地。。
Maven中央仓库并不支持直接发布 jar 包,需要将 jar 包发布到一些指定的第三方Maven仓库,然后该仓库再将 jar 包同步到 Maven中央仓库,Sonatype便是 Maven中央仓库指定的暂存库。
入口有点难找,提示一下,在 Build 选项卡里面
https://issues.sonatype.org/secure/Signup!default.jspa
密码设置十分变态,12位,必须包含大小写数字特殊字符,有必要拿小本本记一下。而且最好不要设置在
xml
中需要转义的特殊字符,比如&
,否则后面配置xml
时还要转义!不要问我为啥知道的。。
点击新建按钮或者直接访问 https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134,提一个 issue
,只有申请通过了才有可能上传到中央仓库上,一般 5 分钟左右会有回应,我昨晚 10 点左右申请的,不知道是不是时差问题他们回应比较快:
io.github.admin4j
.如果你有自己的域名和项目地址也可以,官方人员会询问你是否有这个域名的所有权.在你项目的pom里一定要使用这个groupId,最好包路径也使用gpg的主要作用是生成密钥对,会用于后续我们组件发布的校验。
···
#生成(按照提示,依次输入用户名、邮箱。最后输入O)
gpg --gen-key
#查看
gpg --list-keys
···
配置 sonatype的账号密码 用户名和密码是第一步中注册的JIRA的
<!-- Sonatype的用户名密码 -->
<servers>
<server>
<id>ossrh</id>
<username>rxc</username>
<password>Sonatype1234@</password>
</server>
</servers>
如果gpg 有密码时,也可以使用Maven 参数的形式
<settings>
<profiles>
<profile>
<id>gpg</id>
<properties>
<gpg.executable>gpg</gpg.executable>
<gpg.passphrase>your password</gpg.passphrase>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>gpg</activeProfile>
</activeProfiles>
</settings>
在项目的pom.xml文件中,配置相应的开源协议、仓库信息、开发人员信息和发布配置
<url>https://github.com/andanyoung</url>
<!-- 开源签名证书 -->
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-- 仓库信息 -->
<scm>
<connection>scm:git@github.com:admin4j/common-http.git</connection>
<developerConnection>scm:git@github.com:admin4j/common-http.git
</developerConnection>
<url>https://github.com/admin4j/common-http</url>
</scm>
<!-- 开发人员信息 -->
<developers>
<developer>
<name>admin4j</name>
<email>1218853253@qq.com</email>
<organization>https://github.com/andanyoung</organization>
<timezone>+8</timezone>
</developer>
</developers>
<!-- 发布项目到 sonatype -->
<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>
发布到maven中央仓库会要求我们在上传jar到同时,必须同步发布对应到Javadoc、source、asc(利用gpg生成到校验),所以需要在maven中添加以下构建插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<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>
<!-- 生成java source.jar -->
<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-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<show>private</show>
<nohelp>true</nohelp>
<charset>UTF-8</charset>
<encoding>UTF-8</encoding>
<docencoding>UTF-8</docencoding>
<!-- TODO 临时解决不规范的javadoc生成报错,后面要规范化后把这行去掉 -->
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行以下命令进行发布
(如果 pom.xml 中 autoReleaseAfterClose 的值为true,则脚本会自动完成在平台上close、release的操作,至此你将成功发布了,否则我们继续查看第3步)
mvn clean package deploy -DskipTests
发版成功会组件将存储在单独的临时存储库中(stagingRepositories),该存储库对您的项目成员是私有的。为了发布这些组件,您必须“发布”它们。如果您在存储库中检查时发现任何问题,您也可以删除暂存存储库。这允许您在修复发现的任何问题后重新运行部署,并避免将这些组件发布到发布存储库中,然后再依次发布到中央存储库中。
通常,此过程是手动完成的,但也可以从命令行触发操作。
您需要登录到 https://s01.oss.sonatype.org/上的 OSSRH 才能访问和使用您的暂存存储库。将您帐户中的用户名和密码用于 OSSRH 的 JIRA 问题跟踪系统以及OSSRH 用户界面右上角的登录链接。
部署后,存储库将处于打开状态。您可以使用Contents选项卡评估存储库中已部署的组件。如果您认为一切都是正确的,可以按列表上方的关闭按钮。这将触发针对 需求的组件评估。
如果您的组件不符合要求,则关闭将失败。如果发生这种情况,您可以按Drop并且暂存存储库将被删除。这使您可以更正组件和部署过程的任何问题并重新运行部署。通过选择,可以在列表下方的“活动”选项卡中获得详细信息。按各个步骤以获取更多详细信息。
成功关闭暂存存储库后,您可以按Release按钮将其释放。这会将组件移动到 OSSRH 的发布存储库中,并在其中同步到中央存储库。
参考:https://central.sonatype.org/publish/release/#locate-and-examine-your-staging-repository
release成功后,点击refresh,此时Staging Repositories中就不存在此缓存项目了,这时,在oss全局搜索中搜索项目,则会找到已发布的jar
然后进行最后一步,就是回到issue中,添加评论,告诉他们我们已经发布了项目,等待他们审核,大概需要2个小时左右就好了,只有第一次发布的时候需要审核,以后更新版本时,直接点在oss发布,10分钟左右就可以搜索到新的版本。
第一次再下午或者晚上上架的会会比较迟,因为审核人员下班了o(╥﹏╥)o,大概第二天早上才会通过
再pom.xml 里面配置自动close,release,就不需要我们去手动操作了
<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>
使用 Sonatype 的账号密码登录 https://s01.oss.sonatype.org/
老版本的登录地址为 https://oss.sonatype.org/#welcome,这个是登录不成功的。
https://mvnrepository.com/artifact/io.github.admin4j/http
https://search.maven.org/artifact/io.github.admin4j/http
当您的版本以-SNAPSHOT结尾时,将执行快照部署。
官网上有句话
SNAPSHOT versions are not synchronized to the Central Repository. If you wish your users to consume your SNAPSHOT versions, they would need to add the snapshot repository to their Nexus Repository Manager, settings.xml, or pom.xml. Successfully deployed SNAPSHOT versions will be found in https://s01.oss.sonatype.org/content/repositories/snapshots/
意思是:SNAPSHOT 不会同步到Central Repository 中心仓库,用户使用不了。如果要使用需要加配置
<repositories>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
官方最强发布文档 https://central.sonatype.org/publish/publish-maven/
转载:https://andyoung.blog.csdn.net/article/details/124800163