为了把我们多年开发的框架分享给开发者通过meval库引用,所以花了些时间把框架打包发布到了Menval Central,中间遇到了很多问题,一步步记录下来,以免后面新手踩坑。

很多Java开发者都很乐意把自己做好的组件发布到网上共享给大家使用,Maven Central是一个Java组件共享中心,但首次发布的确会遇到很多问题,希望通过我们的亲身经历,让看到这篇文章的幸运开发者少走弯路,顺利完成jar发布到Maven Central.

1、注册账号

访问https://issues.sonatype.org/,点击Sign up进行注册。

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(1)

账号注册

输入邮箱,全名,用户名和密码进行注册,这里密码要求比较复杂,建议保存到电脑里,用户名和密码后面发布项目时需要用到。

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(2)

填写用户注册信息

2、新建项目的问题

注册成功后登录并新建一个项目问题:

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(3)

新建项目问题

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(4)

选问题类型为New Project

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(5)

填写项目信息内容

这里要注意的是Group Id的填写,如果有自己的域名的,一般就是域名反过来,如果没有域名的,可以用github应用地址(这里我没有用过,大家可以找一下相关教程)。

这里我只讲域名的情况,域名一定要真实而要自己可以做解析的,后面会有要求对域名增加一条TXT的DNS解析(你可以提前做好解析,后面应该能省掉一步,很有可能一步到位)。

项目地址(Project URL)可以填自己项目网站或开源地址都行,SCM填写项目开源平台git地址(可以是空项目,但一定要有,而且要公开的所有人都能访问那种,不能是私有的)。

用户名(username)就填填写你注册的用户名即可。点击新建完成问题提交。

3、平台工作人员审核

问题提交后,平台工作人员审核并提出问题,像我们是用域名的情况,审核人员会要求你对域名做一个TXT的DNS解析,我们照做即可,做完后要记得把问题状态重新改为开放状态。

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(6)

审核负责人要求增加域名解析

这里有一个插曲,这个jkas.org域名也是我们的,本来打算用这个域名的,由于某种原因这个域名国内用不了,我们转到国外服务商那里,结果搞到解析不了(心里那个苦),这里不细表。

域名解析方式如下,增加一条TXT解析记录,记录值为上面审核员要求的,其实就是OSSRH-问题的ID :

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(7)

XX云域名解析后台

添加完成后,回到问题那里,把问题状态改为开放(open),然后等审核员审核,当收到如下评论的时候,同时问题状态也会变成已解决状态,那就恭喜你,项目已经审核通过,就可以进入jar包的提交操作流程了。

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(8)

审核负责人回复通过评论

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(9)

问题状态变成已解决

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),输入一个密码后确认即可。要记住这个密钥密码,后面提交时需要用到,建议也保存到电脑。

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(10)

密钥用户名和邮箱输入

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(11)

密钥密码输入

这时可以用gpg --list-keys命令查看新建的密钥:

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(12)

查看已经生成密钥

关键一步,发送公钥到服务器:XXXXXX为你的公钥,坑点(注意发送地址)

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys XXXXXXXXX

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(13)

上传公钥到服务器

查看公钥上传结果 :XXXXXX为你的公钥

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys XXXXXXXXX

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(14)

查看公钥上传结果

激动人心的时候来了,开始上传jar包:

进入项目根目录下命令行执行:mvn clean deploy -P release

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(15)

编译并上传项目jar包

当出现,BUILD SUCESS时则成功上传到了sonatype

这时登录: https://s01.oss.sonatype.org/ (坑点,注意登录地址)

也是用之前注册的用户名和密码登录,登录后,点击左侧Staging Repositories,右侧则出现我们刚提交的项目,选中项目,点击左上方close按钮,改变项目状态为closed状态。这里会有项目问题校验,如果close失败,根据问题提示进行修改,重新提交。close成功后,选中项目,再点击左上方的release按钮发布到maven central操作。

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(16)

上传成功的包列表

这个操作做完后,去到之前创建问题那里发一条评论,说已经release成功即可。

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(17)

发一条release生成的评论

工作人员也会回复你(其实是机器人回复的)

这个时候你已经能通过这个 https://repo1.maven.org/maven2/,地址查看到你发布的项目了,4个小时后就能同步到Maven Central(https://search.maven.org/)了。

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(18)

通过https://repo1.maven.org/maven2/浏览到项目

漫长漫长漫长漫长漫长漫长漫长漫长漫长漫长漫长漫长漫长的等待.......,4小时后,终于可以在Maven Central(https://search.maven.org/)搜索到提交的项目了。

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(19)

搜索项目名称即可有结果和版本

如何根据版本找jar包maven(正确发布jar到mavencentral和避坑指南)(20)

项目详细信息及引用方式

至此,整个jar发布到Maven Central 的过程就完成了。

把地址分享给你的开发小伙伴们去引用就可以啦!

,