Maven仍然是目前使用人数很多的、非常受欢迎的项目构建工具。其方便之处在于:我们只需在配置文件pom.xml中引入依赖和插件,他就可以自动从中央仓库下载、配置并运行程序。不过假设我们自己写了一个jar外部包,想放到maven中央仓库并使得别人和我们自己使用的时候更加方便,应该怎么做呢?
一,去sonatype网站注册账户并申请工单
进入issues.sonatype.org,注册一个账户,然后点击“新建”按钮创建一个工单:
如下图,项目选择:Community Support - Open Source Project Repository Hosting (OSSRH)
问题类型选择:New Project
其余如下图:
等待管理员审核。审核完成,管理员会在下面提示你让你验证这个域名是你的或者证明gitee或者github空间是你的,例如我的:
意思是让我在我的gitee账户中新建一个公开仓库,其空间地址为:
https://gitee.com/swsk33/OSSRH-60021
新建完成后,点击下方的“备注”按钮回复管理员告诉他我已经新建仓库。
验证完成,管理员就会接着回复你一些地址,这就说明你的工单通过了,可以上传项目了。
二,配置我们的项目
现在我们可以上传项目了。
先进入我们的maven安装目录,编辑目录里面的conf文件夹里面的settings.xml文件,找到里面的<servers>标签,添加如下内容:
<server>
<id>自定义一个snapshot服务器id</id>
<username>你刚刚注册的sonatype用户名</username>
<password>你刚刚注册的sonatype用户密码</password>
</server>
<server>
<id>自定义一个release服务器id</id>
<username>你刚刚注册的sonatype用户名</username>
<password>你刚刚注册的sonatype用户密码</password>
</server>
这个配置是配置我们sonatype服务器的账户,使得我们的项目可以上传上去,这里举个例子:
<server>
<id>snapshot</id>
<username>user</username>
<password>123456</password>
</server>
<server>
<id>release</id>
<username>user</username>
<password>123456</password>
</server>
再配置我们的项目的pom.xml如下形式:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--请根据自己的应用完善下列信息-->
<groupId>组</groupId>
<artifactId>包名</artifactId>
<version>版本</version>
<name>应用名称</name>
<description>描述</description>
<url>应用网址</url>
<!--打包方式-->
<packaging>jar</packaging>
<!--maven工程配置-->
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<!--许可证信息,根据自己的情况修改-->
<licenses>
<license>
<name>The Apache Software License, Version2.0</name>
<url>http://www.apache.org/licenses/</url>
<distribution>repo</distribution>
</license>
</licenses>
<!--托管仓库信息,根据自己的应用情况修改-->
<scm>
<url>项目地址</url>
<connection>项目git地址</connection>
<developerConnection>项目地址</developerConnection>
</scm>
<!--开发者信息-->
<developers>
<developer>
<name>姓名</name>
<email>邮箱</email>
<url>主页</url>
</developer>
</developers>
<!--仓库地址配置信息-->
<distributionManagement>
<snapshotRepository>
<!--id 要与setting.xml server id一致 -->
<id>snapshot</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<!--id 要与setting.xml server id一致 -->
<id>release</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
</repository>
</distributionManagement>
<!--发布到oss.sonatype.org需要的组件,已经配置好,无需修改-->
<build>
<plugins>
<!--java source生成插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!--java doc生成插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<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>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
简单的说一下这个配置文件。
<groupId>必须就是我们刚刚工单申请的groupId,包名自己取。
<version>是应用版本,注意版本里面不要带有-SNAPSHOT字样,否则上传后可能无法在仓库找到并发布。
<url>、<name>和<description>是项目网址、名称和描述,这三者都是必须要的,缺一不可,否则上传项目是无法通过校验的。
<licenses>、<developers>和<scm>这个也是必须的,根据自己的实际情况填写。
<distributionManagement>中要设置snapshot仓库(<snapshotRepository>)和release仓库(<repository>)地址,如上填写,需要注意的是两个仓库配置中的<id>必须和我们前面设置的settings.xml中的<servers>中的<id>对应一致,否则无法上传。
<build>部分是发布项目必要的一些组件,已经在上面的配置文件中配置好了,不用改变了,作用见上面的注释。
上面给出的示例,大家可以全部复制作为一个模板去使用,自己进行修改。
三,生成秘钥并上传工程
在上传项目时,我们必须先生成秘钥才能上传。
安装git,右键打开git bash输入生成秘钥命令:
gpg --gen-key
然后会提示要你输入姓名和邮箱地址:
输入完成,会弹出个窗口让你设置这个秘钥的密码并确认:
自己设定一个密码并牢记,因为后面要用到这个密码的。
然后输入命令查询已经生成的秘钥:
gpg --list-keys
在pub字段下面有一个十六进制数,那就是这个秘钥的id。
然后我们要把这个秘钥上传至公钥服务器,需要上传到两个服务器,使用如下命令:
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 秘钥ID
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 秘钥ID
秘钥ID就是我们刚刚gpg --list-keys命令查到的自己的秘钥的ID,复制过去即可。
然后验证是否成功地上传到了两个服务器:
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 秘钥ID
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 秘钥ID
如果两条命令执行输出结果都如下说明成功:
这样,就完成了秘钥的配置了。
需要说明的是,上述第一个公钥地址可能会出现上传不成功的情况(pool.sks-keyservers.net),即上传后再使用--recv-keys发现无数据。这时可以重复上传或者将上述地址改为下列镜像站:
hkp://ha.pool.sks-keyservers.net
hkp://p80.pool.sks-keyservers.net:80
将上述命令中的地址部分替换即可。
接下来,在我们的项目文件夹下打开git bash,输入上传项目命令:
mvn clean deploy
执行过程中会弹出一个窗口要求输入秘钥密码,就是输入我们先开始生成秘钥时设置的秘钥密码。
等待上传,最后显示绿色的Build Success说明上传成功。
四,去仓库发布项目到Maven中央仓库
上面的步骤只是把项目传到了sonatype上了,还没有发布出去。
进入oss.sonatype.org,登录,点击旁边的Staging Repositories即可看到我们发布的项目。
勾选项目,点击close,开始进行项目校验。
我这里已经点过了,所以是灰色的。
再点击下面的active标签可以查看close的进度:
显示All rules passed: Central Sync Requirement就说明校验通过,可以发布了。
再点击上面的release按钮即可发布到中央仓库了。
完成后,大约过个2个小时,你就可以在search.maven.org找到你的发布的项目了!
五,以后再发布的时候
以后发布项目,如果groupId不变的话,我们就不需要再去申请工单了。直接重复上述的二、三、四步中的部分关键步骤即可,其中,settings.xml已经配置了servers,就不用再次配置了,即第二步配置settings.xml可以省略了。秘钥也已经生成过了,也不需要再次生成了, 即第三步的秘钥生成也不需要了。不过如果更换了电脑,那就要重新配置settings.xml并重新生成并上传秘钥了。