发布jar包到maven中央仓库(个人域名)
一、简介
1.1 概述
我们通常使用的Jar包,大多都是从镜像上拉取的,也有私人仓库,也有直接从Maven中央仓库拉取的,无论从镜像还是仓库,发布到中央仓库的jar包,都是可以直接拉取下来的。所以,当我们自己打包了一个jar包之后,打算开源出去装逼的时候,我们就可以将jar包发布到sonatype.org,这个地址看起来不是maven,但是发布上去之后,我们在mvnrepository.com和search.maven.org都可以看到自己的jar包了。
本文按照网上乱七八糟的方式上传过jar包,经过血与泪的洗礼,总结出了一套最简单实用的方式。
1.2 本篇重点
上篇介绍了如何用gitub的域名来发布自己的jar包,这一篇介绍下如何用自己的域名来发布jar包。
1.3 地址
工单管理地址:https://issues.sonatype.org/secure/Dashboard.jspa
说明:注册账号、创建和管理issue,Jar包的发布是以解决issue的方式起步的
Jar包上传地址:https://oss.sonatype.org/#welcome
说明:使用maven提交后的jar包先到这个库中,可以用maven命令上传,也可以直接在界面上上传。
个人域名:https://www.pomit.cn
二、开始上传
2.1 创建工单
创建工单是必须的,也很简单,在工单管理中提交下jar包相关信息即可。
首先要注册账号,如果没有账号,需要先注册一个,记住用户名密码,后边要配置到setting.xml中。
点击Craete,弹出如下窗口:
必填项选择:
Project:Community Support - Open Source Project Repository Hosting
Issue Type:New Project
Summary:JAR包名称,如:JpaMapper
Group Id:你懂得,不用多说,如com.github.ffch,如果是个人域名,填写个人的groupId,如:cn.pomit
Project URL:项目站点,如:https://github.com/ffch/jpa-mapper,如果有项目主页,填写项目主页,如https://www.pomit.cn/jpa-mapper
SCM url:项目源码仓库,如:https://github.com/ffch/jpa-mapper.git
其他内容不用填写,默认即可。
创建Issue后,Sonatype的工作人员审核处理,一般一个工作日以内,当Issue的Status变为RESOLVED后,就可以进行下一步操作了。
使用Group Id为cn.pomit申请过程如下:
首先Central OSSRH 会问你,这个域名是你的么,怎么证明这个域名是你的呢?
方法有三个:
- 在域名解析中加上一个Txt记录,指向你发布的这个Issues(他称作JIRA ticket:)。(最快)
- 设置一个指向你的github主页的跳转(有点懵逼)
- 用pomit.cn的邮箱发送邮件到central@sonatype.com(这个真麻烦,为此我得搭个邮件服务器)
所以,我选择了第一种方式,在dns里加条记录。
我的域名是在腾讯云买的,所以需要到腾讯云去配置,如图所示,加一条TXT记录即可,然后回去评论告诉他:
他看完之后会告诉你,“可以上传jar包了,上传完成后告诉我下”,然后你就上传jar包吧。
2.2 配置Maven
2.2.1 配置setting.xml
setting.xml文件一般在当前用户文件夹的.m2文件夹下。
在servers中增加server配置
<servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>Sonatype 账号</username>
<password>Sonatype 密码</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>Sonatype 账号</username>
<password>Sonatype 密码</password>
</server>
</servers>
2.2.2 配置pom.xml
2.2.2.1 搜到的方法
网上的一般说要配置oss-parent,这样好处就是很多东西可以省掉。
如:
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
再加上开发者信息:
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>actable</distribution>
</license>
</licenses>
<developers>
<developer>
<name>chenfufei</name>
<email>fufeixiaoyu@163.com</email>
<organization>chenfufei</organization>
<url>https://github.com/ffch</url>
</developer>
</developers>
<scm>
<tag>master</tag>
<url>git@github.com:ffch/jpa-mapper.git</url>
<connection>scm:git:git@github.com:ffch/jpa-mapper.git</connection>
<developerConnection>scm:git:git@github.com:ffch/jpa-mapper.git</developerConnection>
</scm>
2.2.2.2 我的方法
但是如果我们已经配置了一个parent,可能就不想用这种方式了,可以使用以下方式:
<?xml version="1.0" encoding="UTF-8"?>
<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>cn.pomit</groupId>
<artifactId>jpa-mapper</artifactId>
<version>2.0</version>
<packaging>pom</packaging>
<name>jpa-mapper</name>
<description>jpa code for mybatis</description>
<url>https://www.pomit.cn/jpa-mapper</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mybatis.version>3.4.6</mybatis.version>
<mybatis-spring.version>1.3.2</mybatis-spring.version>
<mybatis-spring-boot.version>1.3.0</mybatis-spring-boot.version>
<spring-boot.version>2.0.0.RELEASE</spring-boot.version>
<jpa.version>1.0</jpa.version>
<jpa-mapper.version>1.2.2</jpa-mapper.version>
</properties>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>actable</distribution>
</license>
</licenses>
<developers>
<developer>
<name>chenfufei</name>
<email>fufeixiaoyu@163.com</email>
<organization>chenfufei</organization>
<url>https://github.com/ffch</url>
</developer>
</developers>
<scm>
<tag>master</tag>
<url>git@github.com:ffch/jpa-mapper.git</url>
<connection>scm:git:git@github.com:ffch/jpa-mapper.git</connection>
<developerConnection>scm:git:git@github.com:ffch/jpa-mapper.git</developerConnection>
</scm>
<distributionManagement>
<snapshotRepository>
<id>sonatype-nexus-snapshots</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>sonatype-nexus-staging</id>
<name>Nexus Release Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>${jpa.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-autoconfigure</artifactId>
<version>${mybatis-spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<dependency>
<groupId>cn.pomit</groupId>
<artifactId>jpa-mapper-spring-boot-autoconfigure</artifactId>
<version>${jpa-mapper.version}</version>
</dependency>
<dependency>
<groupId>cn.pomit</groupId>
<artifactId>jpa-mapper-spring-boot-starter</artifactId>
<version>${jpa-mapper.version}</version>
</dependency>
<dependency>
<groupId>cn.pomit</groupId>
<artifactId>jpa-mapper-core</artifactId>
<version>${jpa-mapper.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<profiles>
<profile>
<id>sonatype-oss-release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<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>
<configuration>
<aggregate>true</aggregate>
<javadocExecutable>${JAVA_HOME}/bin/javadoc</javadocExecutable>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<modules>
<module>jpa-mapper-spring-boot</module>
<module>jpa-mapper-core</module>
</modules>
</project>
2.3 配置gpg-key
如果是使用的windows,可以下载gpg4win,地址:https://www.gpg4win.org/download.html,安装后在命令行中执行
gpg --gen-key
生成,过程中需要填写名字、邮箱等,其他步骤可以使用默认值,不过有个叫:Passphase的参数需要记住,这个相当于是是密钥的密码,下一步发布过程中进行签名操作的时候会用到。
命令执行之后,会提示输入真实姓名和邮箱,之后提示输入密码。
之后会得到pub,上图中深色部分
将pub上传到key验证库
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys EBD22379E4658EFC731753EC27039418A67D0C8F
2.4 上传Jar包
使用maven命令上传jar包:
mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=密钥密码"
实际操作过程中,-Darguments="gpg.passphrase=密钥密码"不写会提示输入密码,我这里写了还是提示了。
使用maven命令部署会更好一点,因为我用eclipse没部署成功,提示出错,eclipse是这样玩的:
这个过程也是很让人崩溃的,特别慢,而且上传完成之后还是有很多问题。下面介绍一种快捷上传的方式。
2.5 快捷上传jar包
使用maven命令上传多个jar包时,sonatype会自动把项目分割成多个Repository,这样close的时候就会校验失败,因为这个原因,上传了n次,不得不另辟蹊径。
失败情况如图,不是asc文件没有,而是在第二个Repository中,close的时候就失败了:
因此,我们不能用这种方式,我们可以在页面上直接上传:
先drop掉失败记录(个人强迫证),点击左侧的staging-upload,选择自己的pom文件和其他文件上传
Select Artifact(s) for Upload按钮点了选择文件之后,要点Add Artifact按钮将文件放置到Artifacts列表框中。
Description必填,但随意。
如图:
三、Jar入库
经过漫长的等待,jar包可能应该已经上传到stagingRepositories了。
如图所示,我们可以在右上角的搜索框输入关键字查找我们的jar包。多个jar包的上传,会出现多个Repository,点击相应的Repositories,可以查看内容。
图示:
3.1 校验Jar包
选择列表中的Repositories,多个Repositories要同时选定,此时的构件状态为open,点击上方的close–>Confirm。
在下边的Activity选项卡中查看状态,当状态变成closed后,执行Release–>Confirm,并在下边的Activity选项卡中查看状态。
成功后构件自动删除,一小段时间(约1-2个小时)后即可同步到maven的中央仓库。
下一篇介绍下如何用自己的域名来发布jar包。步骤类似,前面部分略有不同,需要配置其他东西。
四、 JpaMapper
JpaMapper官方地址:
https://www.pomit.cn/jpa-mapper/