maven-发布到*仓库
一、前言
一般在Java开发中都会使用maven从*仓库、阿里镜像仓库中获得类库,这些类库都是由世界各地开发者或组织上传,那么如何将自己的开源作品上传至maven*仓库呢?下面我来实现这个操作。
二、创建工单
2.1 注册maven
注册地址:https://issues.sonatype.org/secure/Signup!default.jspa
2.2 登录maven工单系统
地址:https://issues.sonatype.org/login.jsp
2.3 跳转到工单管理页,点击新建
地址:https://issues.sonatype.org/secure/Dashboard.jspa
2.4 填写工单
工单内容填写:
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 工单审核
(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)gp*生秘钥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>[email protected]:v2hoping/flymock.git</url>
<connection>scm:git:[email protected]:v2hoping/flymock.git</connection>
<developerConnection>scm:git:[email protected]:v2hoping/flymock.git</developerConnection>
</scm>
<!—-指定开发者信息-->
<developers>
<developer>
<name>houping wang</name>
<email>[email protected]</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一般就为上传的文件
6.2 open变为close
点击close按钮
注意这里可能遇到的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按钮
6.4 第一次发布需同步Maven搜索仓库
在最开始提交工单的地方告知“我已经将代码发布”,然后会回复告知你,在10分钟内同步,最长2个小时。
访问地址:
(1)https://search.maven.org/search (一般这个10-2小时同步,我查时大约3小时,好像慢了点)
(2)https://mvnrepository.com/search(一般这个时间更久,一天吧)
之后你就可以在这两个地址中查到并下载maven
七、发布新版本
1.修改版本号
2.重新执行步骤五、6.1、6.2、6.3步即可