51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

如何上传自己的jar包到maven中央仓库(2021最新版)

# (一)概述 {#一-概述}

现在网络上已经有不少上传jar包至中央仓库的教程,但是我搜了一大圈之后发现当时的做法目前并不适用,因此决定自己写下上传jar包至中央仓库的方式,写这篇文章的时间是2021年8月18日。

# (二)注册jira {#二-注册jira}

本文档通过sonatype上传jar包至maven中央仓库,Sonatype通过JIRA来管理OSSRH仓库,因此首先注册jira账号

https://issues.sonatype.org/secure/Signup!default.jspa

# (三)发布申请 {#三-发布申请}

jira创建完成后,我们需要提一个上传jar包的申请:

https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

其中概要和描述可以自己随便写一点关于要上传项目的详情,groupId填写自己的域名,如果没有的话可以填io.github.[你的github账户名],另外两个必填项填写项目的git地址

创建完成之后,会有人对你的请求做处理,并在注释中给出意见,如果通过的话,这个问题的状态就会变成已解决

# (四)发布项目 {#四-发布项目}

当请求通过后,处理人员会发过来处理成功的消息,同时会带上发布项目的教程地址:

https://central.sonatype.org/publish/publish-guide/#deployment

虽然这个教程中贴上了很详细的过程,但是因为全英文,而且还有点乱,因此我在这篇文章中发布一次

# 4.1 安装配置gpg {#_4-1-安装配置gpg}

发布到Maven仓库中的所有文件都要使用GPG签名,以保障完整性,因此我们需要先创建GPG,下载GPG

https//www.gnupg.org/download/

安装过程就一路next就行,安装完成之后在命令行输入gpg --version,如果弹出具体的版本号就说明安装成功。

通过gpg --gen-key命令生成密钥,期间会输入用户名、邮箱和密码,记住自己的密码。

生成之后通过gpg --list-keys查看密钥,pub下的一连串字符就是公钥,将这串公钥发布到密钥服务器:

gpg --keyserver keyserver.ubuntu.com --send-keys 你的密钥

1

发送完成后提示发送成功

# 4.2 配置maven的setting.xml {#_4-2-配置maven的setting-xml}

setting.xml是maven的配置文件,放在本地,你可以通过idea的setting找到当前项目对应的setting.xml文件路径

部署ossrh身份认证信息:

<settings>
  	<servers>
    		<server>
      			<id>ossrh</id>
      			<username>your-jira-id</username>
      			<password>your-jira-pwd</password>
    		</server>
  	</servers>
</settings>

1
2
3
4
5
6
7
8
9

至此,setting.xml配置就结束了

# 4.3 配置pom文件 {#_4-3-配置pom文件}

接下来配置项目的pom文件:

首先填写项目相关的信息,比如groupId,developers等等,这一块每个人都不同,这里就不做过多讲解,注意!groupId必须和你提交jira时填写的一样,不然怎么都传不上去。下面仅供参考:

<groupId>io.github.oliverliy</groupId>
<artifactId>fast-sso</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
<name>fast-sso</name>
<url>https://github.com/OliverLiy/fast-sso</url>
<description>一个可快速接入的sso项目</description>
<licenses>
    <license>
        <name>Apache License, Version 2.0</name>
        <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        <distribution>repo</distribution>
        <comments>A business-friendly OSS license</comments>
    </license>
</licenses>
<scm>
    <url>https://github.com/OliverLiy/fast-sso</url>
    <connection>https://github.com/OliverLiy/fast-sso.git</connection>
</scm>
<modules>
    <module>fast-sso-client</module>
    <module>fast-sso-server</module>
    <module>fast-sso-example</module>
</modules>
<developers>
    <developer>
        <name>javayz</name>
        <id>javayz</id>
        <email>974474148@qq.com</email>
        <roles>
            <role>Developer</role>
        </roles>
        <timezone>+8</timezone>
    </developer>
</developers>

<properties> <springboot.version>2.2.0.RELEASE</springboot.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties>

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

配置distributionManagement,自 2021 年 2 月起,所有的新项目都配置在https://s01.oss.sonatype.org/上,因此下面的配置在一些2021年之前的博客中都是不一样的。

<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>

1
2
3
4
5
6
7
8
9
10

接着配置打包插件、 javadoc 和源 Maven 插件、Maven GPG 插件

<build>
        <plugins>
            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <version>1.6.7</version>
                <extensions>true</extensions>
                <configuration>
                    <serverId>ossrh</serverId>
                    <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
                    <autoReleaseAfterClose>true</autoReleaseAfterClose>
                </configuration>
            </plugin>
            <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>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.9.1</version>
                <configuration>
                    <!-- jdk1.8要加上,1.7要去掉,否则会报错 -->
                    <additionalJOptions>
                        <additionalJOption>-Xdoclint:none</additionalJOption>
                    </additionalJOptions>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </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>
        </plugins>
</build>

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

最后提供一份完整的pom.xml

<?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>
&lt;groupId&gt;io.github.oliverliy&lt;/groupId&gt;
&lt;artifactId&gt;fast-sso&lt;/artifactId&gt;
&lt;version&gt;0.0.1&lt;/version&gt;
&lt;packaging&gt;pom&lt;/packaging&gt;
&lt;name&gt;fast-sso&lt;/name&gt;
&lt;url&gt;https://github.com/OliverLiy/fast-sso&lt;/url&gt;
&lt;description&gt;一个可快速接入的sso项目&lt;/description&gt;
&lt;licenses&gt;
    &lt;license&gt;
        &lt;name&gt;Apache License, Version 2.0&lt;/name&gt;
        &lt;url&gt;http://www.apache.org/licenses/LICENSE-2.0.txt&lt;/url&gt;
        &lt;distribution&gt;repo&lt;/distribution&gt;
        &lt;comments&gt;A business-friendly OSS license&lt;/comments&gt;
    &lt;/license&gt;
&lt;/licenses&gt;
&lt;scm&gt;
    &lt;url&gt;https://github.com/OliverLiy/fast-sso&lt;/url&gt;
    &lt;connection&gt;https://github.com/OliverLiy/fast-sso.git&lt;/connection&gt;
&lt;/scm&gt;
&lt;modules&gt;
    &lt;module&gt;fast-sso-client&lt;/module&gt;
    &lt;module&gt;fast-sso-server&lt;/module&gt;
    &lt;module&gt;fast-sso-example&lt;/module&gt;
&lt;/modules&gt;
&lt;developers&gt;
    &lt;developer&gt;
        &lt;name&gt;javayz&lt;/name&gt;
        &lt;id&gt;javayz&lt;/id&gt;
        &lt;email&gt;974474148@qq.com&lt;/email&gt;
        &lt;roles&gt;
            &lt;role&gt;Developer&lt;/role&gt;
        &lt;/roles&gt;
        &lt;timezone&gt;+8&lt;/timezone&gt;
    &lt;/developer&gt;
&lt;/developers&gt;

&lt;properties&gt; &lt;springboot.version&gt;2.2.0.RELEASE&lt;/springboot.version&gt; &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt; &lt;project.reporting.outputEncoding&gt;UTF-8&lt;/project.reporting.outputEncoding&gt; &lt;java.version&gt;1.8&lt;/java.version&gt; &lt;/properties&gt; &lt;profiles&gt; &lt;profile&gt; &lt;id&gt;default&lt;/id&gt; &lt;activation&gt; &lt;activeByDefault&gt;true&lt;/activeByDefault&gt; &lt;/activation&gt; &lt;distributionManagement&gt; &lt;snapshotRepository&gt; &lt;id&gt;ossrh&lt;/id&gt; &lt;url&gt;https://s01.oss.sonatype.org/content/repositories/snapshots&lt;/url&gt; &lt;/snapshotRepository&gt; &lt;repository&gt; &lt;id&gt;ossrh&lt;/id&gt; &lt;url&gt;https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/&lt;/url&gt; &lt;/repository&gt; &lt;/distributionManagement&gt; &lt;build&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;org.sonatype.plugins&lt;/groupId&gt; &lt;artifactId&gt;nexus-staging-maven-plugin&lt;/artifactId&gt; &lt;version&gt;1.6.7&lt;/version&gt; &lt;extensions&gt;true&lt;/extensions&gt; &lt;configuration&gt; &lt;serverId&gt;ossrh&lt;/serverId&gt; &lt;nexusUrl&gt;https://s01.oss.sonatype.org/&lt;/nexusUrl&gt; &lt;autoReleaseAfterClose&gt;true&lt;/autoReleaseAfterClose&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-source-plugin&lt;/artifactId&gt; &lt;version&gt;2.2.1&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;id&gt;attach-sources&lt;/id&gt; &lt;goals&gt; &lt;goal&gt;jar-no-fork&lt;/goal&gt; &lt;/goals&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;/plugin&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt; &lt;version&gt;2.9.1&lt;/version&gt; &lt;configuration&gt; &lt;!-- jdk1.8要加上,1.7要去掉,否则会报错 --&gt; &lt;additionalJOptions&gt; &lt;additionalJOption&gt;-Xdoclint:none&lt;/additionalJOption&gt; &lt;/additionalJOptions&gt; &lt;/configuration&gt; &lt;executions&gt; &lt;execution&gt; &lt;id&gt;attach-javadocs&lt;/id&gt; &lt;goals&gt; &lt;goal&gt;jar&lt;/goal&gt; &lt;/goals&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;/plugin&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-gpg-plugin&lt;/artifactId&gt; &lt;version&gt;1.5&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;id&gt;sign-artifacts&lt;/id&gt; &lt;phase&gt;verify&lt;/phase&gt; &lt;goals&gt; &lt;goal&gt;sign&lt;/goal&gt; &lt;/goals&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt; &lt;/profile&gt; &lt;/profiles&gt;

</project>

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128

# 4.4 打包上传 {#_4-4-打包上传}

最后一步就比较简单了,在当前目录下执行deploy命令

mvn clean deploy

1

稍等片刻,提示build success后即表示打包成功

# (五)发布 {#五-发布}

上面执行完成之后,登陆nexus:https://s01.oss.sonatype.org/#stagingRepositories,登上jira账号之后就能看到我们刚刚发布的内容

选中后点击上方的Close,他会检测你的jar包是否存在问题,如果存在问题,点击下方的Activity即可查看具体的问题,主要影响release的问题大部分都是打包时漏了一些东西,照着问题修复即可。

检测完成后上方的release就会变成可点击的状态,点击release后,你会收到一份邮件

邮件的意思是大概30分钟可以同步到maven仓库,大概4个小时可以在search.maven.org中搜到。现在我已经能在中央仓库看到自己的jar包了。你的jar包就能被别人使用了。

# (六)总结 {#六-总结}

为什么要捣鼓这个东西呢?因为最近正在写一个有关统一认证的开源项目,需要上传jar包至中央仓库。这个开源项目的目的是为了能让项目通过简单的一些配置就可以快速接入统一认证系统,因此我给这个项目取名fast-sso,之后会发一个初始版本出来。我是鱼仔,我们下期再见!

赞(4)
未经允许不得转载:工具盒子 » 如何上传自己的jar包到maven中央仓库(2021最新版)