最近写了个maven项目想要打包上传到maven中央仓库方便开源调用,网上教程看了不少,坑也填了不少,在这里做一个详细的教程,让大家少花时间,快速高效的完成项目打包上传。
1.访问工单系统https://issues.sonatype.org/secure/Dashboard.jspa,注册账号新建问题
新建的问题选项与图中标红保持一致,接下来还有4项必填项
Summary:你的jar包自己起个名字(无要求)
Group Id:项目标识
注:这里的标识不是和你项目中一致的,而是你的项目所在的域名,如果你随便填的话,就会收到邮件确认是否拥有域名,如果是个人的可以挂在开源网站下,我是挂在码云下的,就可以填写如下:com.gitee.你的码云id
Project URL:项目地址
SCM URL :项目clone的git地址
审核通过后会收到这样一封邮件,说明你的问题通过了
注:很多教程里说查看自己提的问题的状态为Fixed就通过了,但是没说怎么查找,点击Issues,就会出现近期问题,你就可以查到自己的了,如下图:
2.安装gpg并上传公钥
就是安装一个密钥生成工具,生成密钥,上传公钥到密钥服务器,因为官网下的太慢,我这里提供一个安装包https://download.csdn.net/download/u013407099/10897615
安装完后,打开电脑的cmd命令行,输入gpg --gen-key,填写姓名和邮箱,然后输入密钥密码,密钥就会生成成功,展示出如下信息
然后将生成好的密钥上传到密钥服务器,输入命令
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys xxxxx(上面生成的密钥标识)
pool.sks-keyservers.net这个代表的是密钥服务器地址(就按我的来就可以,复制就完事了)
注:密钥上传后各个密钥服务器需要同步,可能会导致后续的验证出现无法找到public key的提示,如果你多等一会也是可以的
3.进行maven项目的打包生成配置(重点)
pom文件一定要包含以下几个内容
说明:
<name>fastorm</name>
<description>fastorm is a lightweight database operate util</description>
<url>https://gitee.com/grassprogramming/FastORM_Java/</url>
证书:
<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:
<scm>
<tag>master</tag>
<url>git@https://gitee.com/grassprogramming/FastORM_Java.git</url>
<connection>scm:git:git@https://gitee.com/grassprogramming/FastORM_Java.git</connection>
<developerConnection>scm:git:git@https://gitee.com/grassprogramming/FastORM_Java.git</developerConnection>
</scm>
开发者信息:
<developers>
<developer>
<name>ypeng</name>
<email>yanpeng19940119@vip.qq.com</email>
<organization>https://gitee.com/grassprogramming</organization>
</developer>
</developers>
打包配置(重点,抄就完事):
<profiles>
<profile>
<id>release</id>
<build>
<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>
<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>
</plugins>
</build>
</profile>
</profiles>
上传打包文件配置:
<distributionManagement>
<snapshotRepository>
<!-- 这个id需要在setting.xml中设置 -->
<id>oss</id>
<name>OSS Snapshots Repository</name>
<!-- 这里的url就是Issue中回复的snapshots 的repo地址-->
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>oss</id>
<name>OSS Staging Repository</name>
<!-- 这里的url就是Issue中回复的staging 的repo地址-->
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
这里的配置的id名称,要在maven的setting.xml文件中配置(不知道文件在哪里的找到maven安装目录,conf文件夹下)
<server>
<id>oss</id>
<username>admin</username>
<password>admin123</password>
</server>
注:这里的username是你一开始注册账号的username,而不是注册时填写的邮箱,下图邮件标注部分
4.进行打包上传
打开cmd,进入到pom文件的统计目录,输入mvn clean deploy -P release,这个地方的release就是上面打包配置中的id,所以直接复制就好,打包会运行一会然后出现upload信息,最后提示BuildSuccess说明打包并上传成功了。
注:打包的时候会遇到一个坑,可能会提示javadoc,IllegalArgumentException,这是因为环境变量classpath配置了%JAVA_HOME%类似的非法字符串,所以需要把这些删除,如果删了对你的电脑有影响,改成决对路径既可以,这里指的是classpath中的所有,不单单指java部分的,需要全部改掉,然后重启cmd运行之前的打包命令既可以
5.进行上传包的验证和发布
打包完成后登陆https://oss.sonatype.org/#stagingRepositories,使用之前注册的用户名密码,注意登陆的用户名是UserName而非邮箱,进入后点击Staging Repositories查看自己上传的jar包
注:很多教程只告诉我们点了这个找上传的jar,但是却没有说怎么找,搜索按各种东西都也搜不到,这里给大家总结下,加载出列表后,拉到最下方,选择上传时间和你的一致的(一般就是最新的一个),勾选中,查看Owner是否是你自己(这是我找了一个小时总结出来的经验教训),如下图
勾选中上传的jar包,点击close,系统会进行验证,验证不通过会在activity中有提示,一般就是上文提到的没有找到publickey问题,验证通过后会变成closed,然后点击release发布初始版本,这时候需要先回复你之前问题通过的工单,因为之前邮件明确说明了,工作人员会审核你发布的版本,1-2个工作日就可以在maven中央仓库搜索到了。
注:你的issue的groupid要与你的maven项目的groupid一致!否则release时会提示403拒绝访问!