Maven如何deploy自己的项目到Maven Central?
这里跳过OSSRH账号的申请以及工单的建立,这两个步骤请参考这个文档: 注册账号和提交申请
⚡️ 接下来的所有步骤都将以账号和工单通过为前提进行 ⚡️ 本文将以博主的一个开源项目为 Demo ⚡️ 如果嫌本篇不够官方,可以查看这篇官方文章:看这里
接下来正片开始
开始之前,你需要理解几个概念:
什么是Nexus?
Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,常用来搭建 Maven 私服,所以也有人将 Nexus 称为“Maven仓库管理器”
什么是OSSRH?
OSSRH(Open Source Project Repository Hosting)开发者可以将自己的开源项目生成的maven jar包托管到这里。然后自动同步到maven中央仓库
什么是Maven的plugin?
在maven的默认生命周期中,提供了一套官方的插件和生命周期阶段绑定的策略,如本文就通过plugin来帮我们将构建物上传到OSSRH当中
什么是SNAPSHOT?
SNAPSHOT
就是指的快照,就是非稳定版本,如果你的项目版本是 -SNAPSHOT
结尾,则代表非稳定版本,那么打包过程会跳过gpg的验签,发布到你的快照仓库,相同版本会进行覆盖。如果本地仓库允许,可以实时更新最新的依赖。如果你的不是以 -SNAPSHOT
结尾,那么你的构建就不能进行覆盖操作,并且会发布到稳定的仓库
理解完这几个概念,就能很清楚地了解构建上传的步骤了,并能够从错误日志中知道是哪里出现了问题
接下来就开始上传自己的构建
POM 文件设置OSSRH地址
请按顺序填入自己的pom文件
<developers>
<developer>
<id>XXXXX</id>
<name>XXXXX</name>
<email>XXXXX</email>
<roles>
<role>XXXXX</role>
</roles>
</developer>
</developers>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<scm>
<tag>master</tag>
<url>https://github.com/Cocowwy/ShowDB.git</url>
<connection>scm:git:git@github.com:Cocowwy/ShowDB.git</connection>
<developerConnection>scm:git:git@github.com:Cocowwy/ShowDB.git</developerConnection>
</scm>
<!--以上这些请修改成自己的配置项,这里不做过多的解释,我们关注的是下面的配置项-->
<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>
这里的url请注意是s01开头的域名,官方已经迁移过域名了,你可以理解这里是将你的构建push到id为ossrh的仓库里
Maven的setting文件设置OSSRH账号密码
<settings>
<servers>
<server>
<id>ossrh</id>
<username>你的OSSRH的账号</username>
<password>你的OSSRH的密码</password>
</server>
</servers>
</settings>
这里有两个点需要你注意:
- 这里的id要为ossrh,不能为其他的,因为你要指定使用ossrh来存储存储你的构建
- 这里的账号密码要为你ossrh的账号密码,如果含有特殊字符,如 123&456 请将密码替换成如下格式!
123<![CDATA[这里替换成你的特殊字符]]>456
POM 的插件设置
<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.10.3</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<!--忽略doc的报错,不影响打包-->
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</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>
<configuration>
<keyname>${gpg.keyname}</keyname>
<passphraseServerId>${gpg.keyname}</passphraseServerId>
</configuration>
</execution>
</executions>
</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>
</plugins>
</build>
这里说一下各个插件是干什么用的:
- 先说第一个插件,doc插件 虽然你可以通过
-Dmaven.javadoc.skip=true
来跳过doc的生成,但是官方文档会建议你上传doc文件,所以请按照要求进行,如果你的构建过程出现因为doc的不规范导致deploy失败,可以加上这个配置<additionalparam>-Xdoclint:none</additionalparam>
如果复制的上述的plugin,我已经给你加上了 - 再说第二个插件,也就是gpg插件 Maven GPG 插件用于通过以下配置对组件进行签名,包括你的源代文件以及doc文件等,当然这一步你得保证你本地已经生成过GPG的私钥了
- 如果本地没有生成GPG的私钥,那么可以通过这里 安装GPG
- 如果你本地有GPG,并且已经生成过了,请使用命令
gpg --list-signatures --keyid-format 0xshort
,并且如下图所示,复制sig 3后面的十六进制的key,这个待会会用到
- 再说第三个插件
nexus-staging-maven-plugin
这个是直接帮你发布的到OSSRH的
Maven的setting文件设置你的GPG密码
<settings>
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.keyname>替换成你刚刚的sig3后面的key</gpg.keyname>
<gpg.executable>gpg2</gpg.executable>
<gpg.passphrase>替换成你的GPG密码</gpg.passphrase>
</properties>
</profile>
</profiles>
</settings>
- 这里的keyname替换成你刚刚的sig3后面的key,因为在上面的pom文件里面通过${gpg.keyname}制定了私钥的id
- gpg.passphrase请替换成你的GPG的密码
准备工作完成,开始发布你的构建吧
通过命令,发布你的构建
mvn clean deploy
如果你需要指定你的配置文件,请使用
mvn clean deploy --settings 配置文件地址
如果你需要确认你的配置文件是否成功正确,请使用
mvn help:effective-settings
去你的OSSRH仓库看看你发布的文件在不在
我这里就以本人的一个开源项目1.1.3的稳定版本的发布为例子,可以看到在这里已经将构建上传完成
结尾
踩坑踩了几天,如果有疑问欢迎下方留言~ 如果有帮助欢迎收藏点赞
转载自:https://juejin.cn/post/7216246232763007035