likes
comments
collection
share

Maven如何deploy自己的项目到Maven Central?

作者站长头像
站长
· 阅读数 26

这里跳过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,这个待会会用到 Maven如何deploy自己的项目到Maven Central?
  • 再说第三个插件 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仓库看看你发布的文件在不在

地址戳这里

Maven如何deploy自己的项目到Maven Central?

我这里就以本人的一个开源项目1.1.3的稳定版本的发布为例子,可以看到在这里已经将构建上传完成

结尾

踩坑踩了几天,如果有疑问欢迎下方留言~ 如果有帮助欢迎收藏点赞

转载自:https://juejin.cn/post/7216246232763007035
评论
请登录