maven--将jar包上传到maven中央仓库(公库)
本文介绍怎样将jar包上传到maven中央仓库(公库)。
原文网址: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.查看发布结果
进去后,右上角有个登录。用第1步里注册的JIRA账号密码登录即可。
搜索一下自己的jar包,如下图所示:(成功上传到了Snapshots仓库)
大概过四个小时后,可以在中央仓库搜索到。
新地址:https://central.sonatype.com/
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/
再过一两个小时,就可以在阿里仓库和mvnrepository搜到了。
之后可以在项目中直接引用
<dependency>
<groupId>com.abc</groupId>
<artifactId>test-util</artifactId>
<version>0.0.1</version>
</dependency>
总结
第一次发布时,上边所有步骤都要做。以后再发布时,只操作第6步即可!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)