Maven向中央仓库提交自己的Jar包

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: Maven向中央仓库提交自己的Jar包

本文将介绍如何将自己的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

在这里插入图片描述
提交完稍等一会刷新就可以看到提示statusclosed,可以进行下一步
在这里插入图片描述
点击release
在这里插入图片描述

image-20220921103522418

搜索我们发布的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

image-20230315091935261

这里我们使用的是github托管的静态代码,映射到域名,下面提示让我们创建 OSSRH-89701 文件验证域名是我们的

image-20230315092058859

我们在github博客上创建该文件(这一步可能不需要)

image-20230315101231030

在自己域名解析中配置

image-20230315093253603

然后回复评论给审核员,过一会他会回复验证成功,欢迎使用,我们就可以正常推送了

image-20230315101328768

目录
相关文章
|
5月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
5月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
5月前
|
敏捷开发 Java 持续交付
阿里云云效产品使用合集之maven仓库是否可以代替自建的Nexus
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
Java Maven
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
63 10
|
2月前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
177 3
|
3月前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
769 3
|
5月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
5月前
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
6月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
敏捷开发 JavaScript Java
阿里云云效产品使用合集之如何进行Maven私有仓库迁移
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。