一、前言

一般在Java开发中都会使用maven从中央仓库、阿里镜像仓库中获得类库,这些类库都是由世界各地开发者或组织上传,那么如何将自己的开源作品上传至maven中央仓库呢?下面我来实现这个操作。

二、创建工单

2.1 注册maven

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

中央maven仓库 发布maven中央仓库_git

2.2 登录maven工单系统

地址:https://issues.sonatype.org/login.jsp

中央maven仓库 发布maven中央仓库_github_02

2.3 跳转到工单管理页,点击新建

地址:https://issues.sonatype.org/secure/Dashboard.jspa

中央maven仓库 发布maven中央仓库_java_03

2.4 填写工单

工单内容填写:

中央maven仓库 发布maven中央仓库_git_04

Project:Community Support - Open Source Project Repository Hosting (OSSRH)

Issue Type:New Project

Summary:填写项目名

Description:项目说明

Group Id:项目group,例如com.v2hoping。该Group Id为域名,该域名必须归你所有,若没有请使用github地址,例如com.github.v2hoping.

Project URL:项目的github地址,例如https://github.com/v2hoping/flymock

SCM url:项目的git地址,例如https://github.com/v2hoping/flymock.git

其他不用填写

2.5 工单审核

中央maven仓库 发布maven中央仓库_maven_05

(1)Central OSSRH询问这个v2hoping.com是你的域名么,如果是一是可以增加DNS域名TXT解析,添加该网址作为内容;二是可以将该域名指向你Github的页面。建议使用第一种,审批速度快而且简单。

(2)添加完成,你回复它添加已完成,可以附带解析命令(不是必须的),也可以简单回复就好。

(3)Central OSSRH告诉你现在可以打包上传你的类库了。同时第一次打包上传后,要告诉它,它会执行同步到maven搜索服务器。

 

三、配置gpg-key

3.1 安装gpg

Mac环境:brew install gpg

Windows环境:下载https://www.gpg4win.org

分为以下几个步骤,windows是界面操作比较简单,以mac为例:

(1)gpg产生秘钥key

gpg --gen-key

输入真实姓名、电子邮件地址、注释

(2)输入passphrase

输入passphrase私钥保护密码(这个一定要记住)

(3)检查生成秘钥

gpg --list-keys

(4)发布秘钥

gpg --keyserver hkp://keyserver.ubuntu.com:11371 —send-keys 刚刚查询到的秘钥

(5)验证发布是否成功

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

输出:

gpg: 密钥 *****:“你的真实姓名 <你的邮箱>”未改变

gpg: 合计被处理的数量:1

gpg:           未改变:1

输出以上信息说明发布秘钥成功

可能会遇到的BUG:

(1)gpg --keyserver hkp://keyserver.ubuntu.com:11371 —send-keys 发布不成功,查询不到,这个可能是hkp://keyserver.ubuntu.com:11371地址有问题,被墙了,可以查询下其他地址发布,或者翻墙发布即可。

 

四、配置Maven

配置Maven可以分为两种,一种是继承Maven的发布Parent,一种是自己编添加所有信息,建议使用第一种,一些默认信息parent中已经包含了,在父pom中继承即可。

4.1 pom.xml配置

<parent>

    <groupId>org.sonatype.oss</groupId>

    <artifactId>oss-parent</artifactId>

    <version>7</version>

</parent>

<!—-有些高版本可能会遇到找不到javadoc异常-->

<properties>

    <javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>

</properties>

<!—-指定你的协议-->

<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>

    <tag>master</tag>

    <url>git@github.com:v2hoping/flymock.git</url>

    <connection>scm:git:git@github.com:v2hoping/flymock.git</connection>

    <developerConnection>scm:git:git@github.com:v2hoping/flymock.git</developerConnection>

</scm>

<!—-指定开发者信息-->

<developers>

    <developer>

        <name>houping wang</name>

        <email>whp1473@163.com</email>

        <organization>v2hoping</organization>

    </developer>

</developers>

<!—-你提交工单中的Group Id-->

<groupId>com.v2hoping</groupId>

 

<build>

    <pluginManagement>

        <plugins>

            <!—-指定你的构建版本,不指定可能会报错-—>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.5.1</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                    <compilerVersion>1.8</compilerVersion>

                </configuration>

            </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>

                    </execution>

                </executions>

            </plugin>

            <!—-jdk1.8中必须增加Xdoclint:none,因为1.8 javadoc要求必须严格格式检查,否则会报错-—>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-javadoc-plugin</artifactId>

                <version>2.7</version>

                <executions>

                    <execution>

                        <id>attach-javadocs</id>

                        <goals>

                            <goal>jar</goal>

                        </goals>

                        <configuration>

                            <additionalparam>-Xdoclint:none</additionalparam>

                        </configuration>

                    </execution>

                </executions>

            </plugin>

        </plugins>

    </pluginManagement>

</build>

主要部分介绍:

(1)license:开源协议,修改成你的开源协议

(2)scm:你的代码仓库地址,修改成你的地址

(3)developers:开发者信息,修改成你的信息

(4)plugins:必须存在maven-source-plugin(源码打包)、maven-javadoc-plugin(javadoc打包)、maven-gpg-plugin(生成文件,保证jar完整性)

(5)distributionManagement:发布中央仓库地址

4.2 setting.xml配置

<!--sonatype-nexus-staging-->

<server>

    <id>sonatype-nexus-staging</id>

    <username>你第一步注册的Maven账号</username>

    <password>你的密码</password>

</server>

<server>

    <id>sonatype-nexus-snapshots</id>

    <username>你第一步注册的Maven账号</username>

    <password>你的密码</password>

</server>

sonatype-nexus-staging和sonatype-nexus-snapshots分别对应distributionManagement中的两个发布地址,你可能会奇怪distributionManagement在哪里?其实它已经配置在了Maven Parent中。

 

五、上传

mvn clean deploy -P sonatype-oss-release -Darguments=“gpg.passphrase=passphrase私钥保护密码”1

注意可能会遇到的BUG:

(1)会遇到401异常,该异常是说setting.xml中配置的server不正确。

用两种方式解决,第一用这个server登录Maven检查是否可以登录,如果可以,说明用户名密码没有问题。

第二,将你的setting.xml拷贝到.m2文件夹下,要改名成setting.xml,插件中有固定读取.m2 setting.xml的地方,所以如果你的setting是自定义地址,可能会出现这个问题。

 

六、发布

6.1 登录

访问:https://oss.sonatype.org/,使用Sonatype账号密码登录

6.1 找到上传文件

按照时间倒排,profile显示为你的Group Id一般就为上传的文件

中央maven仓库 发布maven中央仓库_中央maven仓库_06

6.2 open变为close

点击close按钮

中央maven仓库 发布maven中央仓库_github_07

注意这里可能遇到的BUG:

(1)Event: Failed:Sources Validation

原因:没有将源码打包进来

解决:

<plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-source-plugin</artifactId>

    <version>3.0.0</version>

    <executions>

        <execution>

            <phase>compile</phase>

            <goals>

                <goal>jar-no-fork</goal>

            </goals>

        </execution>

    </executions>

</plugin>

(2)Event: Failed:Javadoc Validation

原因:Javadoc缺少

解决:增加javadoc打包插件修复

(3)Event: Failed:Signature Validation

原因:签名错误

解决:增加签名插件,输入签名秘钥

 

6.3 close变为release

点击release按钮

中央maven仓库 发布maven中央仓库_git_08

6.4 第一次发布需同步Maven搜索仓库

在最开始提交工单的地方告知“我已经将代码发布”,然后会回复告知你,在10分钟内同步,最长2个小时。

访问地址:

(1)https://search.maven.org/search (一般这个10-2小时同步,我查时大约3小时,好像慢了点)

(2)https://mvnrepository.com/search(一般这个时间更久,一天吧)

之后你就可以在这两个地址中查到并下载maven

中央maven仓库 发布maven中央仓库_github_09

 

七、发布新版本

1.修改版本号

2.重新执行步骤五、6.1、6.2、6.3步即可




一、前言

一般在Java开发中都会使用maven从中央仓库、阿里镜像仓库中获得类库,这些类库都是由世界各地开发者或组织上传,那么如何将自己的开源作品上传至maven中央仓库呢?下面我来实现这个操作。

二、创建工单

2.1 注册maven

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

中央maven仓库 发布maven中央仓库_git

2.2 登录maven工单系统

地址:https://issues.sonatype.org/login.jsp

中央maven仓库 发布maven中央仓库_github_02

2.3 跳转到工单管理页,点击新建

地址:https://issues.sonatype.org/secure/Dashboard.jspa

中央maven仓库 发布maven中央仓库_java_03

2.4 填写工单

工单内容填写:

中央maven仓库 发布maven中央仓库_git_04

Project:Community Support - Open Source Project Repository Hosting (OSSRH)

Issue Type:New Project

Summary:填写项目名

Description:项目说明

Group Id:项目group,例如com.v2hoping。该Group Id为域名,该域名必须归你所有,若没有请使用github地址,例如com.github.v2hoping.

Project URL:项目的github地址,例如https://github.com/v2hoping/flymock

SCM url:项目的git地址,例如https://github.com/v2hoping/flymock.git

其他不用填写

2.5 工单审核

中央maven仓库 发布maven中央仓库_maven_05

(1)Central OSSRH询问这个v2hoping.com是你的域名么,如果是一是可以增加DNS域名TXT解析,添加该网址作为内容;二是可以将该域名指向你Github的页面。建议使用第一种,审批速度快而且简单。

(2)添加完成,你回复它添加已完成,可以附带解析命令(不是必须的),也可以简单回复就好。

(3)Central OSSRH告诉你现在可以打包上传你的类库了。同时第一次打包上传后,要告诉它,它会执行同步到maven搜索服务器。

 

三、配置gpg-key

3.1 安装gpg

Mac环境:brew install gpg

Windows环境:下载https://www.gpg4win.org

分为以下几个步骤,windows是界面操作比较简单,以mac为例:

(1)gpg产生秘钥key

gpg --gen-key

输入真实姓名、电子邮件地址、注释

(2)输入passphrase

输入passphrase私钥保护密码(这个一定要记住)

(3)检查生成秘钥

gpg --list-keys

(4)发布秘钥

gpg --keyserver hkp://keyserver.ubuntu.com:11371 —send-keys 刚刚查询到的秘钥

(5)验证发布是否成功

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

输出:

gpg: 密钥 *****:“你的真实姓名 <你的邮箱>”未改变

gpg: 合计被处理的数量:1

gpg:           未改变:1

输出以上信息说明发布秘钥成功

可能会遇到的BUG:

(1)gpg --keyserver hkp://keyserver.ubuntu.com:11371 —send-keys 发布不成功,查询不到,这个可能是hkp://keyserver.ubuntu.com:11371地址有问题,被墙了,可以查询下其他地址发布,或者翻墙发布即可。

 

四、配置Maven

配置Maven可以分为两种,一种是继承Maven的发布Parent,一种是自己编添加所有信息,建议使用第一种,一些默认信息parent中已经包含了,在父pom中继承即可。

4.1 pom.xml配置

<parent>

    <groupId>org.sonatype.oss</groupId>

    <artifactId>oss-parent</artifactId>

    <version>7</version>

</parent>

<!—-有些高版本可能会遇到找不到javadoc异常-->

<properties>

    <javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>

</properties>

<!—-指定你的协议-->

<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>

    <tag>master</tag>

    <url>git@github.com:v2hoping/flymock.git</url>

    <connection>scm:git:git@github.com:v2hoping/flymock.git</connection>

    <developerConnection>scm:git:git@github.com:v2hoping/flymock.git</developerConnection>

</scm>

<!—-指定开发者信息-->

<developers>

    <developer>

        <name>houping wang</name>

        <email>whp1473@163.com</email>

        <organization>v2hoping</organization>

    </developer>

</developers>

<!—-你提交工单中的Group Id-->

<groupId>com.v2hoping</groupId>

 

<build>

    <pluginManagement>

        <plugins>

            <!—-指定你的构建版本,不指定可能会报错-—>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.5.1</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                    <compilerVersion>1.8</compilerVersion>

                </configuration>

            </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>

                    </execution>

                </executions>

            </plugin>

            <!—-jdk1.8中必须增加Xdoclint:none,因为1.8 javadoc要求必须严格格式检查,否则会报错-—>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-javadoc-plugin</artifactId>

                <version>2.7</version>

                <executions>

                    <execution>

                        <id>attach-javadocs</id>

                        <goals>

                            <goal>jar</goal>

                        </goals>

                        <configuration>

                            <additionalparam>-Xdoclint:none</additionalparam>

                        </configuration>

                    </execution>

                </executions>

            </plugin>

        </plugins>

    </pluginManagement>

</build>

主要部分介绍:

(1)license:开源协议,修改成你的开源协议

(2)scm:你的代码仓库地址,修改成你的地址

(3)developers:开发者信息,修改成你的信息

(4)plugins:必须存在maven-source-plugin(源码打包)、maven-javadoc-plugin(javadoc打包)、maven-gpg-plugin(生成文件,保证jar完整性)

(5)distributionManagement:发布中央仓库地址

4.2 setting.xml配置

<!--sonatype-nexus-staging-->

<server>

    <id>sonatype-nexus-staging</id>

    <username>你第一步注册的Maven账号</username>

    <password>你的密码</password>

</server>

<server>

    <id>sonatype-nexus-snapshots</id>

    <username>你第一步注册的Maven账号</username>

    <password>你的密码</password>

</server>

sonatype-nexus-staging和sonatype-nexus-snapshots分别对应distributionManagement中的两个发布地址,你可能会奇怪distributionManagement在哪里?其实它已经配置在了Maven Parent中。

 

五、上传

mvn clean deploy -P sonatype-oss-release -Darguments=“gpg.passphrase=passphrase私钥保护密码”1

注意可能会遇到的BUG:

(1)会遇到401异常,该异常是说setting.xml中配置的server不正确。

用两种方式解决,第一用这个server登录Maven检查是否可以登录,如果可以,说明用户名密码没有问题。

第二,将你的setting.xml拷贝到.m2文件夹下,要改名成setting.xml,插件中有固定读取.m2 setting.xml的地方,所以如果你的setting是自定义地址,可能会出现这个问题。

 

六、发布

6.1 登录

访问:https://oss.sonatype.org/,使用Sonatype账号密码登录

6.1 找到上传文件

按照时间倒排,profile显示为你的Group Id一般就为上传的文件

中央maven仓库 发布maven中央仓库_中央maven仓库_06

6.2 open变为close

点击close按钮

中央maven仓库 发布maven中央仓库_github_07

注意这里可能遇到的BUG:

(1)Event: Failed:Sources Validation

原因:没有将源码打包进来

解决:

<plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-source-plugin</artifactId>

    <version>3.0.0</version>

    <executions>

        <execution>

            <phase>compile</phase>

            <goals>

                <goal>jar-no-fork</goal>

            </goals>

        </execution>

    </executions>

</plugin>

(2)Event: Failed:Javadoc Validation

原因:Javadoc缺少

解决:增加javadoc打包插件修复

(3)Event: Failed:Signature Validation

原因:签名错误

解决:增加签名插件,输入签名秘钥

 

6.3 close变为release

点击release按钮

中央maven仓库 发布maven中央仓库_git_08

6.4 第一次发布需同步Maven搜索仓库

在最开始提交工单的地方告知“我已经将代码发布”,然后会回复告知你,在10分钟内同步,最长2个小时。

访问地址:

(1)https://search.maven.org/search (一般这个10-2小时同步,我查时大约3小时,好像慢了点)

(2)https://mvnrepository.com/search(一般这个时间更久,一天吧)

之后你就可以在这两个地址中查到并下载maven

中央maven仓库 发布maven中央仓库_github_09

 

七、发布新版本

1.修改版本号

2.重新执行步骤五、6.1、6.2、6.3步即可