0%

如何发包到中央仓库-完整教程

相信很多小伙伴自己都会有一些包,我们可以将包发布中央仓库,然后直接通过maven来使用这些包,下面就整理下如何将包发到中央仓库。

新建项目

第一步,我们需要在sonatype上注册一个账号,这一步就不再演示了。

注册好账户之后,然后我们来创建项目。点击新建按钮,问题类型 选择 New Project,如下所示:

image

在该页面中,注意需要添加groupId,项目的描述信息等,填写完毕后进行保存。用过jira的同学对这个系统肯定十分熟悉,因为就是jira。

注意如果groupId以前没有在这个上面使用过,那么第一次使用需进行注册,然后才可以发包,新建好的项目会收到以下评论:

image

翻译过来有以下几点:

如果你有自己的域名,groupId就可以是将域名反转过来的,比如fun.mingshan,那么你可以:

  • 在你的域名添加一条DNS解析,需要是TXT 类型的,指向当前创建的issue
  • 重新打开这个一条issue

如果你没有自己的域名,那么你可以:

  • 使用github这种开放的域名,不过需要创建一个仓库来验证github账户的权限

大概是这样,我选用有域名添加一条DNS解析这种操作,十分快捷。DNS解析规则如下:

image

上面的操作完,等issue的状态变为已解决时,会收到一条评论:

image

我们接下来就可以将包发送到中央仓库了。

更新pom.xml文件

增加开源协议,坐着,SCM信息等,具体信息可以参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<groupId>fun.mingshan</groupId>
<artifactId>markdown4j</artifactId>
<version>1.0-SNAPSHOT</version>

<name>markdown4j</name>
<description>To solve the problem of not quickly generating Markdown files at the Java level, using builder mode, very simple to use.</description>
<url>https://github.com/mstao/markdown4j</url>

<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>

<developers>
<developer>
<name>Walker Han</name>
<email>walkerhan@126.com</email>
</developer>
</developers>

<issueManagement>
<system>Github Issue</system>
<url>https://github.com/mstao/markdown4j/issues</url>
</issueManagement>

<scm>
<connection>scm:git:https://github.com/mstao/markdown4j.git</connection>
<developerConnection>scm:git:https://github.com/mstao/markdown4j.git</developerConnection>
<url>https://github.com/mstao/markdown4j</url>
<tag>${project.version}</tag>
</scm>

<inceptionYear>2022</inceptionYear>

增加插件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<!-- Javadoc -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>

<configuration>
<!-- jdk1.8要加上,1.7要去掉,否则会报错 -->
<additionalJOptions>
<additionalJOption>-Xdoclint:none</additionalJOption>
</additionalJOptions>
</configuration>
</plugin>
<!-- Gpg Signature -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

增加distributionManagement:

1
2
3
4
5
6
7
8
9
10
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>

更新maven settings.xml文件

1
2
3
4
5
6
7
8
9
<settings>
<servers>
<server>
<id>ossrh</id>
<username>your-jira-id</username>
<password>your-jira-pwd</password>
</server>
</servers>
</settings>

配置PGP公匙信息

Windows下使用gpg4win来进行配置。下载地址 https://www.gpg4win.org/get-gpg4win.html。

下载安装完后,打开命令行执行:gpg --gen-key,来生成公匙信息,注意此步需要输入sonatype 网站上的用户名,邮箱信息,必须保持一致。如下所示:

image

生成的过程中,会有个弹框要求输入Passphase信息,这个是密钥的密码,同样需要记牢。十分重要,后续在进行发布包的时候要用到的,如下:

image

上面操作完之后,会生成公匙,需要将公钥发布到 PGP 密钥服务器,两个密钥服务器都发布一下:

1
2
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公钥ID
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 公钥ID

查询公钥是否发布成功

1
2
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 公钥ID
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 公钥ID

使用 gpg --list-keys 命令查询配置好的公私钥信息

image

打包推送

使用mvn clean deploy进行编译部署,会将当前SNAPSHOT包推送到OSS 里面,注意这一步需要用到Passphase

发布RELEASE

大致流程:

1
Maven发布 -> Sonatype Close  -> Sonatype Release

Maven发布

关于如何利用maven进行发布的操作,这里就不详细介绍了,可以参考另一篇文档: Maven发布RELEASE包到云效私有仓库并打TAG

主要有两步操作:mvn release:preparemvn release:perform

Sonatype Close

发布完正式RELEASE 后,此时会将正式包推送到 staging Repositories,进入oss.sonatype,选择你刚才发布的包,然后点击Close 按钮,会弹出确认框,如下所示:

image

Sonatype Release

Close 完之后,我们就可以进行Release了。点击Release按钮,需要等待一会,可以点击下边的Activity选项卡中查看状态。等待一会,会收到邮件,告诉你已经同步中央仓库了。

image

image

至此,流程已经走完了。同步到中央仓库的时间比较漫长,耐心等待即可。

加图标

另外,我们看到很多仓库都有很多图标,比如编译状态,中央仓库版本等,类似下面这种:

image

我们可以使用:https://shields.io/ 这个网站来生成,选择对应的项目生成就可以了。

参考