Github开源Java项目(IJPay)上传到Maven Central 详细介绍

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 之前IJPay Jar是上传到JitPack,但是有很多同学反馈说Jar无法下载。为了响应群众的号召,这次需要向中央仓库提交jar, 我们可以利用Sonatype OSSRH把Jar等资源提交给Maven的中央仓库。

之前IJPay Jar是上传到JitPack,但是有很多同学反馈说Jar无法下载。为了响应群众的号召,这次需要向中央仓库提交jar, 我们可以利用Sonatype OSSRH把Jar等资源提交给Maven的中央仓库。

Sonatype OSSRH介绍:
Sonatype OSSRH使用Nexus 为开源项目提供仓库管理服务,该仓库就是所谓maven的中央仓库,OSSRH允许我们向Maven中央仓库提交二进制文件。
1:提交(deploy)开发版本的二进制文件(snapshorts)
2:阶段性的发布版本
3:发布一个release,然后同步他们到中央仓库。

1、准备工作

具体如何填写可以参考IJPay的 issues

IJPay issues

说明:只有当这个issues的状态我resolved时,才可以提交jar包

2、审查要求

需要在pom.xml文件中添加以下内容

  • 1、提供JavaDoc和source
  • 2、使用gpg或者pgp对文件进行签名
  • 3、正确的坐标:groupId、artifactId、version
  • 4、projectName、description、url、license、developers、scm等信息

具体如何添加可以参考我的开源项目IJPay https://github.com/Javen205/IJPay/blob/master/pom.xml

3、部署并发布

这里我使用了Maven部署插件 所以我们要在pom.xml文件中添加相应的配置。

大致步骤如下:

  • 分布管理和认证
  • 配置生成JavaDoc和sources包的插件
  • 配置GPG自动签名的插件

3.1 分布管理和认证

<distributionManagement>
    <snapshotRepository>
        <id>nexus-release</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </snapshotRepository>
    <repository>
        <id>nexus-release</id>
        <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
</distributionManagement>

需要在maven_home/conf/settings.xml配置sonatype(jira)的账号和密码

 <servers>
    <server>
      <id>nexus-release</id>
      <username>sonatype用户名</username>
      <password>sonatype账户的密码</password>
    </server>
  </servers>

特别说明:这里的nexus-release 要与上面的snapshotRepository中的id保持一致

3.2 配置生成javadoc和sources包的插件

<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>
        </execution>
    </executions>
    <configuration>
        <!-- 解决 java8 下发布到 maven 中心库时,生成 doc 的异常 -->
        <additionalparam>-Xdoclint:none</additionalparam>
        <encoding>${project.build.sourceEncoding}</encoding>
        <outputDirectory>${basedir}</outputDirectory>
        <reportOutputDirectory>${basedir}</reportOutputDirectory>
    </configuration>
</plugin>

3.3 使用GPG生成签名key进行签名

3.3.1 使用GPG工具来生成签名

Mac 电脑可以直接使用brew来下载gpg brew install gpg
安装默认目录/usr/local/Cellar/gnupg/2.2.0/bin

更多请参考阮一峰老师的博客

image.png

image.png

注意:根据提示输入姓名,邮箱和备注后,然后会提示输入用来保护密钥的密码(passphrase),如果不需要密码的话直接回车,如果输入了密码那么一定要记住,这个密码在后面会用到。接下来系统会要求你输入一些随机字符,在键盘的字母和符号上乱按就可以了,不过别按回车。

3.3.2 将生成的公钥上传到Sonatype服务器

生成了key以后,按照Sonatype的要求,我们需要把公钥上传到服务器上

 gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公钥的ID

验证一下:

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 私钥的ID

3.3.3 配置GPG自动签名的插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <phase>verify</phase>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
    </executions>
</plugin>

在settings.xml的profiles中配置GPG的签名 :

</profiles>
<profile>
      <id>nexus-release</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <gpg.executable>gpg</gpg.executable>
        <gpg.passphrase>这里是上文生成key的passphrase</gpg.passphrase>
      </properties>
    </profile>
</profiles>

到这里配置工作基本已经完成了。

3.3.4 编译本地代码

进入项目所在目录执行mvn clean install

3.3.5 上传SNAPSHOT版本代码

首先,为了后续的操作顺利执行,我们要确保项目的整个目录没有本地未提交的修改,最好先pull一遍确保后续的步骤里没有冲突。然后运行:
mvn release:prepare

mvn release:prepare does the following:
1、Checks that your local source code does not have any modifications
2、 Writes a release.properties file with details of what it is doing
3、Modifies the pom.xml to the release versions
4、Does a build as far as “package” in order to assure itself that it’s changes have not broken the build
5、Commits the modified pom.xml files to SCM
6、Tags the trunk
7、Modifies the pom.xml to the next snapshot version
8、Commits the modified pom.xml files to SCM

如果命令顺利运行结束,那么这个步骤就算完成了。如果中间出现了什么问题,可以在修复问题后再次运行这条命令,如果想要获得更详细的信息,可以运行:

mvn release:prepare -X

如果不希望从终止的地方开始,而是想从头再来的话可以输入:

mvn release:prepare -Dresume=false

如果想回滚,则

mvn release:rollback

如果这步成功了,则上传到 https://oss.sonatype.org/content/repositories/snapshots 这里了。

3.3.6 上传非SNAPSHOT版本代码

mvn clean deploy -P release -Dgpg.passphrase=第3.3.1步中的passphrase密码

mvn release:perform does the following
1、Checks out the tagged release into target/checkout
2、Forks a “mvn deploy site-deploy”
3、Removes the release.properties file

注: mvn clean deploy -P release -Dgpg.passphrase=第3.3.1步中的passphrase密码 这句话执行时,如果你的版本是快照的,则上传快照,如果是非快照的则上传非快照的,Maven会根据模块的版本号(pom文件中的version)中是否 带有-SNAPSHOT来判断是快照版本还是正式版本。

3.3.7 发布构建

进入https://oss.sonatype.org并登陆,会在左侧有个staging Repositories点击进入,在右侧面板找到你的构件,状态应该是open,你要将其置为closed,点击上方的close按钮即可

接下来系统会自动验证有效性,如果你的Group Id和pom.xml没有错误,状态会自动变成closed,如果有问题,会在下面提示你那里有问题,加入有问题你可以点击drop按钮删掉这个构件,修改后重新执行上传的步骤。

接下来你需要点击release按钮发布你的构件。

在Issue中通知工作人员

然后回到JIRA中你的Issue,写个comment,我写的是Component has been successfully issued.告诉工作人员我发布完成了,等待他们审核。审核通过后我们就可以在中央库搜索到我们的构件了!搜索的地址 是:http://search.maven.org/

image.png

4、总结

0、配置好生成JavaDoc、source以及自动签名(gpg)的插件
1、对本地代码执行 mvn clean install , 解决代码本身的编译问题
2、准备好GPG工具
3、申请注册Sonatype
4、对于SNAPSHOT版本,则执行 mvn release:prepare , 一旦发现有错误,需要执行 mvn release:rollback,项目做完后,执行 mvn release:clean
5、对于release版本,则执行 mvn clean deploy -P release -Dgpg.passphrase=生成Key中passphrase的密码 。

5、添加徽章

Maven Central

[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.javen205/IJPay/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.javen205/IJPay)

使用时只需替换

com.github.javen205/IJPay

以上就是Github开源Java项目(IJPay)上传到Maven Central Repository 的详细介绍。遇到问题可以留言交流。

推荐阅读
10分钟用Jitpack发布开源库
Android Studio 上传aar(Library)到JCenter
Android依赖管理与私服搭建
基于CentOS搭建 Git 服务

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
1月前
|
SQL 监控 数据可视化
完全开源!国内首个完全开源JAVA企业级低代码平台
JeeLowCode 是一款专为企业打造的 Java 企业级低代码开发平台,通过五大核心引擎(SQL、功能、模板、图表、切面)和四大服务体系(开发、设计、图表、模版),简化开发流程,降低技术门槛,提高研发效率。平台支持多端适配、国际化、事件绑定与动态交互等功能,广泛适用于 OA、ERP、IoT 等多种管理信息系统,帮助企业加速数字化转型。
|
29天前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
46 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
4月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
1月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
1月前
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
|
1月前
|
SQL 监控 数据可视化
完全开源!国内首个完全开源JAVA企业级低代码平台
JeeLowCode 是一款专为企业打造的 Java 企业级低代码开发平台,通过五大核心引擎(SQL、功能、模板、图表、切面)和四大服务体系(开发、设计、图表、模版),简化开发流程,降低技术门槛,提高研发效率。平台支持多端适配、国际化、事件绑定与动态交互等功能,广泛适用于 OA、ERP、IoT 等多种管理信息系统,帮助企业加速数字化转型。
完全开源!国内首个完全开源JAVA企业级低代码平台
|
1月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
65 0
|
2月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
133 4
|
3月前
|
Java 数据库连接 Maven
【Java笔记+踩坑】Maven高级
分模块开发、依赖传递与冲突问题、 可选依赖和排除依赖、聚合和继承、属性、多环境配置与应用、私服安装和使用
【Java笔记+踩坑】Maven高级
|
4月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
61 1