Maven向中央仓库提交自己的Jar包
[toc]
本文将介绍如何将自己的jar包发布至公共的中央仓库,通过maven方式进行引用
# 注册账号
注册地址 https://issues.sonatype.org/secure/Signup!default.jspa (opens new window) 填写基础信息
登录地址
https://issues.sonatype.org/login.jsp
这里我使用gitee做提交,网络不太好连GitHub有些卡,逻辑是一样的。 点击创建 填入相关信息 填写信息说明:
字段 | 填写内容 |
---|---|
Summary | 概要(写jar包是做什么用的,可以中文) |
Description | 描述(详细描述jar包是做什么用的,可以与Summary相同,可以中文) |
Group Id | e.g. com.gitee.jast (这里使用gitee做demo) |
Project URL | e.g. https://gitee.com/jastee/jast-tool |
SCM url | e.g. https://gitee.com/jastee/jast-tool.git |
Proejct | 选择 Community Support - Open Source Project Repository Hosting (OSSRH) |
Issue Type | 选择 New Project |
填写完成点击create
创建
提交完成之后状态为开放 英文版如下,后续用英文版进行介绍
然后等待官方人员审核,随后官方人员回复让我们在gitee上创建一个空项目验证该gitee是自己的账号。(期间很尴尬,我创建完了项目没设置公开权限,自己能访问他不能访问,我就一直问他,他也不说啥原因,就让我创建空项目。。。)
注意:创建完空项目后,要回复一下,告诉他们已经创建完成,他们才会审核
当状态变成Status:RESOLVED
则是可以发包了
# GPG 安装
# 安装
brew install gpg
如果在线安装不了则可以直接下载(我是在线安装的) https://gpgtools.org/ (opens new window)
# 生成密钥
# 根据提示输入用户名,邮箱,密码 要记住后面需要用
gpg --gen-key
2
查看生成的密钥
mac@Mac ~ % gpg --list-keys
gpg: 正在检查信任度数据库
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2023-10-23 进行
/Users/mac/.gnupg/pubring.kbx
-----------------------------
pub ed25519 2021-10-23 [SC] [有效至:2023-10-23]
1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
uid [ 绝对 ] jast <745925668@qq.com>
sub sb11111 2021-10-23 [E] [有效至:2023-10-23]
2
3
4
5
6
7
8
9
10
11
1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
(这里公钥为了演示我随便改了下,我实际的公钥不是这个,上传是要传实际的)这个就是公钥一会要上传到密钥服务器
注意这个会过期,上面显示着过期时间,过期后重新生成就可以了
# 上传公钥
mac@Mac ~ % gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
gpg: 正在发送密钥 AAAAAAAAAAAAAAAAAAAF325 到 hkp://keyserver.ubuntu.com:11371
2
查看上传的公钥
# 网络原因可能会接收失败,多执行两次可以查看到成功
mac@Mac ~ % gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
gpg: 从公钥服务器接收失败:No data
mac@Mac ~ % gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
gpg: 密钥 D1BC8A428AA3F325:“jast <745925668@qq.com>” 未改变
gpg: 处理的总数:1
gpg: 未改变:1
2
3
4
5
6
7
# Maven配置
在Maven的setting.xml
中添加账号信息
<server>
<id>ossrh</id>
<username>第一步注册的账号</username>
<password>第一步注册账号的密码</password>
</server>
2
3
4
5
# 上传到Maven仓库
# 修改项目的配置,填写基本信息
Java项目中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>
<groupId>com.gitee.jastee</groupId>
<artifactId>jast-tool</artifactId>
<version>0.0.2</version>
<name>jast-tool</name>
<description>
Java 工具
</description>
<url>https://gitee.com/jastee/jast-tool</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>
<issueManagement>
<system>gitee</system>
<url>https://gitee.com/jastee/jast-tool/issues</url>
</issueManagement>
<scm>
<connection>scm:git:https://gitee.com/jastee/jast-tool.git</connection>
<developerConnection>scm:git:https://gitee.com/jastee/jast-tool.git</developerConnection>
<url>https://gitee.com/jastee/jast-tool</url>
</scm>
<developers>
<developer>
<name>Jast</name>
<email>745925668@qq.com</email>
<url>https://gitee.com/jastee</url>
</developer>
</developers>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<distributionManagement>
<repository>
<id>ossrh</id>
<!-- <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>-->
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
<snapshotRepository>
<id>ossrh</id>
<!-- <url>https://oss.sonatype.org/content/repositories/snapshots</url>-->
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<mavenExecutorId>forked-path</mavenExecutorId>
<useReleaseProfile>false</useReleaseProfile>
<arguments>-Psonatype-oss-release</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.1.0</version>
<inherited>true</inherited>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<excludeResources>true</excludeResources>
<useDefaultExcludes>true</useDefaultExcludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<inherited>true</inherited>
<executions>
<execution>
<id>bundle-sources</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<maxmemory>1024</maxmemory>
<encoding>UTF-8</encoding>
<show>protected</show>
<notree>true</notree>
<!-- Avoid running into Java 8's very restrictive doclint issues -->
<failOnError>false</failOnError>
<doclint>none</doclint>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.7</version>
<configuration>
<formats>
<format>html</format>
<format>xml</format>
</formats>
<check/>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<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>
</profile>
</profiles>
</project>
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# 执行编译命令
编译过程中需要输入之前我们密钥的密码
> mvn clean deploy -DskipTests=true -P release
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 50.101 s
[INFO] Finished at: 2021-10-24T10:15:54+08:00
[INFO] ------------------------------------------------------------------------
2
3
4
5
6
7
可能会遇到的问题问题
打包上传报错
mvn clean deploy -DskipTests=true -P release gpg: 签名时失败: Inappropriate ioctl for device gpg: signing failed: Inappropriate ioctl for device
1
2
3解决方法: 设置环境变量
export GPG_TTY=$(tty)
1重新执行
mvn clean deploy -DskipTests=true -P release
会弹出一个密码输入界面,输入我们之前设置密钥的密码即可
# 通用脚本提交发布
source /etc/profile
export GPG_TTY=$(tty)
mvn clean deploy -DskipTests=true -P release
2
3
# 登录网站配置发布
https://s01.oss.sonatype.org/#stagingRepositories (opens new window)
点击 Staging Repositories
-> 勾选我们要发布的jar包 -> 点击Close
提交完稍等一会刷新就可以看到提示status
为closed
,可以进行下一步
点击release
搜索我们发布的Jar包 可以看到我们发布的Jar包,每个版本的包只能提交一次,不能重复提交到公共仓库 注意:这里不要发布成SNAPSHOT版本了 在中央仓库直接查看也可以看到我们传的jar包
# 项目中应用
# 项目下多模块提交方法
参考项目:https://gitee.com/jastee/security
在父pom中进行配置即可,子项目无需再配置
# 强制刷新Maven
maven的默认更新时间为day,即一天更新一次。
mvn clean install -U
加入依赖,进行下载,发现jar包成功下载
测试应用,可以正常使用
需要更新jar包时,我们修改版本号mvn clean deploy -DskipTests=true -P release
然后提交到仓库发布,执行 closed
-> release
即可。
上传完成后,我们可以直接在pom.xml中引用,在https://mvnrepository.com/ (opens new window) 搜索到需要等几个小时上传完不能直接看到。
至此我们上传到中央仓库成功。
# 第一次成功后第二次再次创建
直接在https://issues.sonatype.org/projects/OSSRH创建一个OSSRH
,然后创建项目提交就行,无需再次等待官方人员审核
# 遇到的问题解决方法
中间遇到了个小插曲 上传之后提示了三个错误 点击
Activity
查看 提示说少各种POM信息Invalid POM: /com/gitee/jastee/jast-tool/0.0.1/jast-tool-0.0.1.pom: Project name missing, Project description missing, Project URL missing, License information missing
1问题原因: pom.xml中文件少配置了相关参数,配置一定要和我上面列的一样。
# 绑定自己的域名
使用group id 为自己域名:wiki.hadoop
这里我们使用的是github托管的静态代码,映射到域名,下面提示让我们创建 OSSRH-89701
文件验证域名是我们的
我们在github博客上创建该文件(这一步可能不需要)
在自己域名解析中配置
然后回复评论给审核员,过一会他会回复验证成功,欢迎使用,我们就可以正常推送了