本文将介绍如何将自己的jar包发布至公共的中央仓库,通过maven方式进行引用
注册账号
注册地址
https://issues.sonatype.org/secure/Signup!default.jspa
填写基础信息
登录地址
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/
生成密钥
# 根据提示输入用户名,邮箱,密码 要记住后面需要用
gpg --gen-key
查看生成的密钥
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]
1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
(这里公钥为了演示我随便改了下,我实际的公钥不是这个,上传是要传实际的)这个就是公钥一会要上传到密钥服务器
注意这个会过期,上面显示着过期时间,过期后重新生成就可以了
上传公钥
mac@Mac ~ % gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 1D3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF325
gpg: 正在发送密钥 AAAAAAAAAAAAAAAAAAAF325 到 hkp://keyserver.ubuntu.com:11371
查看上传的公钥
# 网络原因可能会接收失败,多执行两次可以查看到成功
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
Maven配置
在Maven的setting.xml
中添加账号信息
<server>
<id>ossrh</id>
<username>第一步注册的账号</username>
<password>第一步注册账号的密码</password>
</server>
上传到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>
执行编译命令
编译过程中需要输入之前我们密钥的密码
> 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] ------------------------------------------------------------------------
可能会遇到的问题问题
打包上传报错
mvn clean deploy -DskipTests=true -P release gpg: 签名时失败: Inappropriate ioctl for device gpg: signing failed: Inappropriate ioctl for device
解决方法:
设置环境变量export GPG_TTY=$(tty)
重新执行
mvn clean deploy -DskipTests=true -P release
会弹出一个密码输入界面,输入我们之前设置密钥的密码即可
通用脚本提交发布
source /etc/profile
export GPG_TTY=$(tty)
mvn clean deploy -DskipTests=true -P release
登录网站配置发布
https://s01.oss.sonatype.org/#stagingRepositories
点击 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/ 搜索到需要等几个小时上传完不能直接看到。
至此我们上传到中央仓库成功。
第一次成功后第二次再次创建
直接在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
问题原因:
pom.xml中文件少配置了相关参数,配置一定要和我上面列的一样。
绑定自己的域名
使用group id 为自己域名:wiki.hadoop
这里我们使用的是github托管的静态代码,映射到域名,下面提示让我们创建 OSSRH-89701
文件验证域名是我们的
我们在github博客上创建该文件(这一步可能不需要)
在自己域名解析中配置
然后回复评论给审核员,过一会他会回复验证成功,欢迎使用,我们就可以正常推送了