如何将自己的代码发布到Maven中央仓库?

如何将自己的代码发布到Maven中央仓库?

去年在公司做工作流相关业务时,当时使用flowable做引擎,中途涉及到一些业务上的需求,自己整理了一些代码,考虑到开源精神,当时就想着将于公司业务无关的代码抽离出来,放到Maven中央仓库中,以供别人学习借鉴,跟着各路大神的帖子折腾了不少时间,一路曲折最终发布到仓库中,地址在此 https://mvnrepository.com/artifact/com.github.songyz0310/flowable-lang 需要的可以使用,我会不定期更新。回到本帖主题,本篇不涉及此工具包,主要说下关于Maven发布的步骤和心得。最近心血来潮,希望把这几年的java相关的东西整理下,暂定项目集 java-toolkits 。

第一步,注册GitHub的账户

地址:https://github.com

关于GitHub,无需我多说,Java语言本身就是开源的,作为Javaer又怎么离得开GitHub,注册没什么需要提的,这是我个人的GitHub地址,欢迎评价点星!

第二步,注册Sonatype的账户

地址:https://issues.sonatype.org/secure/Signup!default.jspa

【友情提示】这里的密码校验真的是很太苛刻了,基本上是我见过的最严格的的。注册过后一定要记在小本本上,否则,我敢说大部分人一小时之后就记不得了,

第三步,在Sonatype上提交关于本项目的发布申请

点击页面上方** Create **按钮即可创建此项目的 Issue。

 Project: Community Support - Open Source Project Repository Hosting (OSSRH) 
Issue TypeRequired: New Project 
Summary: java-toolkits (自己项目名称)
Group Id:cn.com.ry.framework (maven项目坐标 Group Id) 
Project URL:https://gitee.com/reywong/LinkLog (项目地址)
SCM url:scm:git:git@gitee.com:reywong/LinkLog.git (源代码地址) 

其他内容可以按照自己实际情况填写,可以用默认值的地方,可以不用填写。

当你提交后状态为等待工作人员审核,审核通过后状态会修改为 RESOLVED

关于此步骤审核我有个小疑问,我2018年发布flowable-lang项目时,跟2019年发布java-toolkits项目要求有些稍微的不同,后边这一次多了对于权限的校验,不过在工作人员的详细回复下,问题不大。毫无疑问,这次比上次校验的更严格了。当你看到最后这一条评论时,就证明你可以开始下一步了。

image

第四步,配置Maven

4.1,配置 settings.xml 文件

在servers节点内部添加如下server配置,这里就会用到第二步的注册信息

 <server>
    <id>sonatype-nexus-snapshots</id>
    <username>Sonatype账号</username>
    <password>Sonatype密码</password>
  </server>
  <server>
    <id>sonatype-nexus-staging</id>
    <username>Sonatype账号</username>
    <password>Sonatype密码</password>
 </server>

4.2,配置项目 pom.xml 文件

增加开源许可协议,SCM信息,开发者信息等待根据自己信息填写即可


<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>
        <url>https://gitee.com/reywong/LinkLo</url>
        <connection>scm:git:git@gitee.com:reywong/LinkLog.git</connection>
        <developerConnection>scm:git:git@gitee.com:reywong/LinkLog.git</developerConnection>
        <tag>1.0.0-SNAPSHOT</tag>
    </scm>

    <developers>
        <developer>
            <name>reywong</name>
            <email>reywongc@163.com</email>
            <url>https://gitee.com/reywong</url>
        </developer>
    </developers>

如果发布Release版本,需要添加Release的相关profile配置,distributionManagement节和maven-compiler-plugin节的配置信息根据自己的实际情况做修改。

  <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <!-- GPG -->
                    <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>
            </plugins>
        </pluginManagement>
        <plugins>
            <!--META-INF-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <addMavenDescriptor>false</addMavenDescriptor>
                    </archive>
                </configuration>
            </plugin>
            <!-- GPG -->
            <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-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <!-- Source -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>package</phase>
                        <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>
                <configuration>
                    <charset>UTF-8</charset>
                    <encoding>UTF-8</encoding>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.1</version>
            </plugin>
        </plugins>

    </build>

    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <name>Nexus Release Repository</name>
            <uniqueVersion>false</uniqueVersion>
            <url>
                https://oss.sonatype.org/service/local/staging/deploy/maven2
            </url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <uniqueVersion>false</uniqueVersion>
            <url>
                https://oss.sonatype.org/content/repositories/snapshots
            </url>
        </snapshotRepository>
    </distributionManagement>

第五步,配置PGP的公钥信息

由于我使用的是Windows,Mac和Linux用户请自行查找本步骤解决方案

Windows下使用gpg4win来进行配置。下载地址 https://www.gpg4win.org/get-gpg4win.html
安装好之后,打开cmd控制台,使用 **gpg --list-keys **命令来查询自己配置的key
如果提示gpg不是可执行程序或命令,请配置Path路径到 **GnuPG **的bin目录

生成密钥的命令 gpg --gen-key,过程中需要使用到姓名、邮箱等信息,这里的配置最好和Sonatype注册信息、pom文件配置信息保持一致,以免不必要的麻烦。
生成的过程中,会有个弹框要求输入Passphase信息,这个是密钥的密码,同样需要记牢。发布签名的过程中会用得到。

使用 gpg --list-keys 命令查询配置好的公私钥信息,使用 gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys <公钥key> 将公钥信息发送到ubuntu.com服务器,后续推送maven仓库会做校验。

第六步,打包Deploy

使用** mvn clean deploy -P <profile-id> 命令,一键打包。
打包过程中会要求输入gpg密钥的
Passphase**信息,输入即可。

【友情提示】如果打包过程中出现了401类的错误,可能是因为Maven的配置文件中Server节点配置的用户名和密码不正确,或者 Issue 还未审核通过。

第七步,发布Release

进入 https://oss.sonatype.org/#stagingRepositories 查看发布好的构件,点击左侧的Staging Repositories,可以使用Group Id或其他信息搜索自己的项目,

此时的构件状态为 Open,选中构件,并点击上方的 **Close–>Confirm **在下边的Activity选项卡中查看状态。

当状态变成closed后,执行 Release–>Confirm 并在下边的Activity选项卡中查看状态。
成功后构件自动删除,一小段时间(约1-2个小时)后即可同步到maven的中央仓库。届时会有邮件通知。

至此,发布到Maven中央仓库完成。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容