原文网址: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 等代码托管服务的域名。

  1. www.springframework.org => org.springframework
  2. subdomain.example.com => com.example
  3. my-domain.com => com.my-domain
  4. github.com/abc => io.github.abc

下面是支持个人 groupid 的代码托管服务,假设使用 io.github.myusername ,需要创建一个名为 OSSRH-序列码的公开仓库进行验证(验证成功后可删除)。如果使用自己的域名,后边需要添加 TXT 解析,让maven中央仓库知道你是域名的所有者。

服务groupid相关文档
GitHubio.github.myusernamehttps://pages.github.com/
GitLabio.gitlab.myusernamehttps://about.gitlab.com/stages-devops-lifecycle/pages/
Giteeio.gitee.myusernamehttps://gitee.com/help/articles/4136
Bitbucketio.bitbucket.myusernamehttps://support.atlassian.com/bitbucket-cloud/docs/publishing-a-website-on-bitbucket-cloud/
SourceForgeio.sourceforge.myusernamehttps://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步即可!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐