为了把我们多年开发的框架分享给开发者通过maven库引用,所以花了些时间把框架打包发布到了Maven Central,中间遇到了很多问题,一步步记录下来,以免后面新手踩坑。
很多Java开发者都很乐意把自己做好的组件发布到网上共享给大家使用,Maven Central是一个Java组件共享中心,但首次发布的确会遇到很多问题,希望通过我们的亲身经历,让看到这篇文章的幸运开发者少走弯路,顺利完成jar发布到Maven Central.
1、注册账号
访问https://issues.sonatype.org/,点击Sign up进行注册。
账号注册
输入邮箱,全名,用户名和密码进行注册,这里密码要求比较复杂,建议保存到电脑里,用户名和密码后面发布项目时需要用到。
填写用户注册信息
2、新建项目的问题
注册成功后登录并新建一个项目问题:
新建项目问题
选问题类型为New Project
填写项目信息内容
这里要注意的是Group Id的填写,如果有自己的域名的,一般就是域名反过来,如果没有域名的,可以用github应用地址(这里我没有用过,大家可以找一下相关教程)。
这里我只讲域名的情况,域名一定要真实而要自己可以做解析的,后面会有要求对域名增加一条TXT的DNS解析(你可以提前做好解析,后面应该能省掉一步,很有可能一步到位)。
项目地址(Project URL)可以填自己项目网站或开源地址都行,SCM填写项目开源平台git地址(可以是空项目,但一定要有,而且要公开的所有人都能访问那种,不能是私有的)。
用户名(username)就填填写你注册的用户名即可。点击新建完成问题提交。
3、平台工作人员审核
问题提交后,平台工作人员审核并提出问题,像我们是用域名的情况,审核人员会要求你对域名做一个TXT的DNS解析,我们照做即可,做完后要记得把问题状态重新改为开放状态。
审核负责人要求增加域名解析
这里有一个插曲,这个jkas.org域名也是我们的,本来打算用这个域名的,由于某种原因这个域名国内用不了,我们转到国外服务商那里,结果搞到解析不了(心里那个苦),这里不细表。
域名解析方式如下,增加一条TXT解析记录,记录值为上面审核员要求的,其实就是OSSRH-问题的ID :
XX云域名解析后台
添加完成后,回到问题那里,把问题状态改为开放(open),然后等审核员审核,当收到如下评论的时候,同时问题状态也会变成已解决状态,那就恭喜你,项目已经审核通过,就可以进入jar包的提交操作流程了。
审核负责人回复通过评论
问题状态变成已解决
4、环境准备
java环境安装,这个不讲了,如果这个都不知道,你就可以不用看下去了。
Manve安装,去官方下载进行安装(https://maven.apache.org/download.cgi)。
GPG安装,windows操作系统下载gpg4win(https://www.gpg4win.org/)并完成安装
配置Maven的 settings.xml,注意这里有两个地方有这个文件,一个是在mavne安装目录下conf文件夹下面,一个是在(用户目录/.m2/)目录下:这里配置用户目录下这个即可,做如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 " >http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>你注册时的用户名</username>
<password>你注册时的密码</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>你注册时的用户名</username>
<password>你注册时的密码</password>
</server>
</servers>
</settings>
配置项目的POM.xml,根据自己项目情况修改信息及依赖,剩下照抄:
坑点,注意 distributionManagement节点里的提交地址。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.org.jkas</groupId>
<artifactId>jkas</artifactId>
<version>2.33</version>
<packaging>jar</packaging>
<name>Jkas</name>
<description>Easy Fast Powerful</description>
<url>${projectUrl}</url>
<licenses>
<license>
<name>GNU GENERAL PUBLIC LICENSE, Version 3.0</name>
<url>https://www.gnu.org/licenses/gpl-3.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<tag>master</tag>
<url>git@gitee.com:soonec/jkas.git</url>
<connection>scm:git:git@gitee.com:soonec/jkas.git</connection>
<developerConnection>scm:git:git@gitee.com:soonec/jkas.git</developerConnection>
</scm>
<developers>
<developer>
<name>你注册时的用户名</name>
<email>你注册时的邮箱</email>
<organization>公司名称</organization>
<url>${projectUrl}</url>
</developer>
</developers>
<!--依赖根据自己项目情况写-->
<dependencies>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>release</id>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<plugins>
<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Javadoc -->
<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>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 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>
<!--Compiler -->
<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>
<fork>true</fork>
<verbose>true</verbose>
<encoding>UTF-8</encoding>
<showWarnings>false</showWarnings>
</configuration>
</plugin>
<!--Release -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.1</version>
</plugin>
<plugin>
<groupId>cn.org.jkas</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.jkas.core.About</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>sonatype-nexus-snapshots</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>sonatype-nexus-staging</id>
<name>Nexus Release Repository</name>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<projectUrl>https://gitee.com:soonec/jkas.git</projectUrl>
<serverId>ossrh</serverId>
</properties>
</project>
2、打包
生成密钥:
打开CMD命令行,输入:gpg --gen-key
这里会要求你输入用户名和邮箱 ,输入你注册时的用户名,邮箱,会提示让你确认输入的是否正确,按相应的字母可以修改用户名和邮箱,按o字母进行输入确认,这时要求你输入密钥密码(一个关键的Passphrase),输入一个密码后确认即可。要记住这个密钥密码,后面提交时需要用到,建议也保存到电脑。
密钥用户名和邮箱输入
密钥密码输入
这时可以用gpg --list-keys命令查看新建的密钥:
查看已经生成密钥
关键一步,发送公钥到服务器:XXXXXX为你的公钥,坑点(注意发送地址)
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys XXXXXXXXX
上传公钥到服务器
查看公钥上传结果 :XXXXXX为你的公钥
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys XXXXXXXXX
查看公钥上传结果
激动人心的时候来了,开始上传jar包:
进入项目根目录下命令行执行:mvn clean deploy -P release
编译并上传项目jar包
过程中会要求你输入密钥密码,输入之前产生密钥时输入的密钥密码即可。
当出现,BUILD SUCESS时则成功上传到了sonatype
这时登录: https://s01.oss.sonatype.org/ (坑点,注意登录地址)
也是用之前注册的用户名和密码登录,登录后,点击左侧Staging Repositories,右侧则出现我们刚提交的项目,选中项目,点击左上方close按钮,改变项目状态为closed状态。这里会有项目问题校验,如果close失败,根据问题提示进行修改,重新提交。close成功后,选中项目,再点击左上方的release按钮发布到maven central操作。
上传成功的包列表
这个操作做完后,去到之前创建问题那里发一条评论,说已经release成功即可。
发一条release生成的评论
工作人员也会回复你(其实是机器人回复的)
这个时候你已经能通过这个
https://repo1.maven.org/maven2/,地址查看到你发布的项目了,4个小时后就能同步到Maven Central(https://search.maven.org/)了。
通过https://repo1.maven.org/maven2/浏览到项目
漫长漫长漫长漫长漫长漫长漫长漫长漫长漫长漫长漫长漫长的等待.......,4小时后,终于可以在Maven Central(https://search.maven.org/)搜索到提交的项目了。
搜索项目名称即可有结果和版本
项目详细信息及引用方式
至此,整个jar发布到Maven Central 的过程就完成了。
把地址分享给你的开发小伙伴们去引用就可以啦!