原文网址:maven--将jar包上传到maven中央仓库(公库)-CSDN博客
简介
本文介绍怎样将jar包上传到maven中央仓库(公库)。
当自己有一些公共组件时,上传到maven公库是最好的,这样项目里直接引用即可,不需要在多处修改,而且所有人都可以直接使用。
本文环境是:Windows系统,maven3,java8,Idea2023。
1.注册Sonatype JIRA账号
网址:Sign up for Jira - Sonatype JIRA
注意:用户名一定要用英文的。
2.准备groupid
Maven 用 groupid 来标识项目空间,用域名逆序的方式命名。下面是两种命名的例子,如果有自己的域名,直接使用就可以;如果没有,可以使用 github 等代码托管服务的域名。
- www.springframework.org => org.springframework
- subdomain.example.com => com.example
- my-domain.com => com.my-domain
- github.com/abc => io.github.abc
下面是支持个人 groupid 的代码托管服务,假设使用 io.github.myusername ,需要创建一个名为 OSSRH-序列码的公开仓库进行验证(验证成功后可删除)。如果使用自己的域名,后边需要添加 TXT 解析,让maven中央仓库知道你是域名的所有者。
服务 | groupid | 相关文档 |
---|---|---|
GitHub | io.github.myusername | https://pages.github.com/ |
GitLab | io.gitlab.myusername | https://about.gitlab.com/stages-devops-lifecycle/pages/ |
Gitee | io.gitee.myusername | https://gitee.com/help/articles/4136 |
Bitbucket | io.bitbucket.myusername | https://support.atlassian.com/bitbucket-cloud/docs/publishing-a-website-on-bitbucket-cloud/ |
SourceForge | io.sourceforge.myusername | https://sourceforge.net/p/forge/documentation/Project%20Web%20Services/ |
假设我本处准备的域名是:abc.com。
3.创建JIRA工单
1.创建JIRA工单
新建工单
进入JIRA主页,点击新建:
填写相应内容
概要的那句话是:
Create and upload project
描述里的那句话是:
Hello, I want to create a new project, and upload to maven center repo.
继续往下滑,还有其他要填写的内容:
然后点击下方的创建
创建后可以看到问题编号:
此时,你会收到一封邮件:通知你成功创建了一条JIRA工单。
2.收到评论
过了几分钟后,我收到了Sonatype JIRA的邮件,说我收到了一条评论。
点击上边JIRA里创建的JIRA(菜单栏=> 问题),即可看到评论信息:
4.验证域名
1.添加DNS记录
修改DNS,添加一条TXT记录(验证成功后,这个DNS记录删除即可)。
将上边的评论里的OSSRH-xxx复制一下,把它添加到DNS的TXT(主机记录是@,记录值是OSSRH-xxx)
2.告诉工作人员已经添加
这里我的回复是:I hava added a DNS TXT record to my domain.
3.工作人员回复
工作人员审核验证完之后会回复你,工单状态会变为“已解决”,就可以上传maven项目了。
一个小时后,邮件里说我收到了JIRA回复,查看JIRA,收到的回复如下:
工单状态变成了“已解决”
5.配置GPG密钥
1.下载gpg工具
下载地址
https//www.gnupg.org/download/
gpg --version
2.生成密钥
生成密钥
gpg --gen-key
提示输入名字和邮箱。输入后,再输入O,回车。然后会弹出要输入密码,这里的密码一定要记住,后边要用。(密码是为了保护私钥用的)
红色箭头即生成的公钥,后边要用(密钥有效期为3年,到时要用密码延长有效期(重新生成也可以))。
发送公钥
gpg --keyserver keyserver.ubuntu.com --send-keys 你的公钥
本处我是:
gpg --keyserver hkp://keyserver.ubuntu.com --send-keys 6C1D0E2XXXXXXXXXEC423
如下:
查看公钥
等几分钟,验证公钥是否发布成功:
gpg --keyserver keyserver.ubuntu.com --recv-keys 6C1D0E2XXXXXXXXXEC423
如下:
备注:
忘记了公钥,也可以通过gpg --list-keys查看当前所有的公钥
3.密钥导入导出
在不同的电脑上操作时,可以直接用现成的密钥。这就需要用导出导入功能。
导出
导出公钥
命令格式:
gpg -a -o public-file.key --export keyId : 导出公钥keyId 到 文件 public-file.key中;
-a 为 --armor 的简写,表示密钥以ASCII的形式输出,默认以二进制的形式输出;
-o 为 --output 的简写,指定写入的文件;
gpg -a -o public-file.key --export 6C1D0E2XXXXXXXX7CE3EC423
导出私钥(导出私钥需要输入之前设置的保护私钥密码)
gpg -a -o private-file.key --export-secret-keys 6C1D0E2XXXXXXXX7CE3EC423
导入
导入公钥
gpg --import public-file.key
导入私钥(导入私钥需要输入保护私钥的密码)
gpg --import private-file.key
6.发布JAR包
1.修改settings.xml
添加如下内容
<settings><servers><server><id>ossrh</id><username>JIRA用户名</username><password>JIRA密码</password></server></servers>
</settings><profiles><profile><id>ossrh</id><properties><!--这里填你安装的GnuPG位置--><gpg.executable>D:/Program Files (x86)/GnuPG/bin/gpg.exe</gpg.executable></properties></profile>
</profiles>
2.修改pom.xml
下边标记了“用于发布”的,都是要与发布JAR包有关的配置。
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.13</version><relativePath/></parent><groupId>com.abc</groupId><artifactId>test-util</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>{project.artifactId}</name><description>test-util</description><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2020.0.1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional><scope>provided</scope></dependency></dependencies><build><plugins><!--指定JDK版本--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><!-- <version>3.5.1</version> --><!-- 指定maven编译的jdk版本。对于JDK8,写成8或者1.8都可以 --><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build><!--用于发布:插件和仓库等信息--><profiles><profile><id>ossrh</id><activation><activeByDefault>true</activeByDefault></activation><distributionManagement><snapshotRepository><!--此id必须与setting.xml的servers=>server=>id中指定的一致--><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><build><plugins><!--发布到staging--><plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.6.8</version><extensions>true</extensions><configuration><serverId>ossrh</serverId><nexusUrl>https://s01.oss.sonatype.org/</nexusUrl><!--自动release--><autoReleaseAfterClose>true</autoReleaseAfterClose></configuration></plugin><!--发布源码--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.2.1</version><executions><execution><id>attach-sources</id><phase>package</phase><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin><!-- Javadoc --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>3.1.1</version><configuration><charset>UTF-8</charset><encoding>UTF-8</encoding><docencoding>UTF-8</docencoding><additionalJOption>-Xdoclint:none</additionalJOption></configuration><executions><execution><id>attach-javadocs</id><goals><goal>jar</goal></goals></execution></executions></plugin><!--gpg加密--><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><!--用于发布:开源协议...--><licenses><license><name>The Apache Software License, Version 2.0</name><url>https://www.apache.org/licenses/LICENSE-2.0.txt</url></license></licenses><!--用于发布:项目链接--><scm><url>https://github.com/xxx/test-util</url><connection>https://github.com/xxx/test-util.git</connection></scm><!--用于发布:开发者信息--><developers><developer><id>xxx</id><name>xxx</name><email>yyy@163.com</email><url>https://github.com/xxx</url></developer></developers></project>
3.发布
4.查看发布结果
https://s01.oss.sonatype.org/
进去后,右上角有个登录。用第1步里注册的JIRA账号密码登录即可。
搜索一下自己的jar包,如下图所示:(成功上传到了Snapshots仓库)
大概过四个小时后,可以在中央仓库搜索到。
新地址:https://central.sonatype.com/
老地址:https://search.maven.org/
snapshot发布后,没有邮件通知。
之后可以在项目中直接引用
<dependency><groupId>com.abc</groupId><artifactId>test-util</artifactId><version>0.0.1-SNAPSHOT</version>
</dependency>
5.发布release版本
上边是snapshot版本,下边看正式版本的发布。
将版本号0.0.1-SNAPSHOT改为:0.0.1。然后重新点击IDEA的maven clean和maven deploy
发布成功后,会收到JIRA的邮件:
查看发布结果
因为在 maven 插件 nexus-staging-maven-plugin 中 autoReleaseAfterClose 设置为 true 了,所以会自动上传到 staging repository ,并且自动执行了 close=>release=>drop 三步曲(即:自动release)。
在仓库里搜索
大概过四个小时后,可以在中央仓库搜索到。
新地址:https://central.sonatype.com/
老地址:https://search.maven.org/
再过一两个小时,就可以在阿里仓库和mvnrepository搜到了。
之后可以在项目中直接引用
<dependency><groupId>com.abc</groupId><artifactId>test-util</artifactId><version>0.0.1</version>
</dependency>
总结
第一次发布时,上边所有步骤都要做。以后再发布时,只操作第6步即可!