如何发布Java项目到Maven中央仓库

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 如何发布Java项目到Maven中央仓库

本文主要记录了「发布Java项目到Maven中央仓库」这一过程。大概分为以下步骤:

准备

首先,我们需要准备一个Java项目,最好是发布在代码托管平台上,比如github, gourpId格式为com.github.<你的用户名>,例如我的github帐号为lzj960515,所以我的项目配置如下:

<groupId>com.github.lzj960515</groupId>
<artifactId>easycanal</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
<description>easycanal</description>
<url>https://github.com/lzj960515/easycanal</url>

因为最后发布项目时需要name、description、url这三样,所以这里也索性写上了。

建立工单

有了项目,我们还要去https://issues.sonatype.org建立工单,负责申请上传资格及完成第一次上传。

新建一个工单

注册并登陆到https://issues.sonatype.org,新建一个Issue

createissue.png

项目和问题类型如图所示

建立好后的样例如下:

createissueed.png

处理工单

建立完之后底下将会有回应,情况如下:

commend.png

  1. 最开始时会告诉你需要到github上建立一个与工单名相同的仓库,用来验证你是否为该项目的拥有者,建立好之后点击工单上的respond按钮。
  2. 再等一会就会告诉你可以发布到构件仓库了:https://oss.sonatype.org
  3. 发布之后添加一条评论,这时就会将发布好之后的jar包同步到中央仓库中,差不多需要等2个小时。

发布之后就可以在https://oss.sonatype.org看到相应的jar包了,两个小时后可以去https://search.maven.org/查找是否发送到Maven中央仓库(可能更久)

发布项目

上面记录了大致的流程,那么发布项目具体应该怎么做呢?

配置GPG密钥

因为我们需要通过maven-gpg-plugin发布项目,所以首先我们需要生成一份自己的GPG密钥。

  1. 下载安装相关工具
    进入下载地址并选择相应系统的工具:https://www.gnupg.org/download/
    我这里是mac,下载内容如下图,第一个是可视化工具,第二个是真正生成密钥的安装包

    downgpg.png
  2. 生成密钥
    打开GPG Keychain工具,点击新建,输入自己的相关信息后生成密钥

    genkey.png
  3. 发送公钥到服务器

    sendkey.png

配置Maven

  1. 在Java项目的pom.xml中添加licensesscmdevelopers相关信息
<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>
    <comments>A business-friendly OSS license</comments>
  </license>
</licenses>
<scm>
  <tag>main</tag>
  <url>https://github.com/lzj960515/easycanal.git</url>
  <connection>scm:git:https://github.com/lzj960515/easycanal.git</connection>
  <developerConnection>scm:git:git@github.com:lzj960515/easycanal.git</developerConnection>
</scm>
<developers>
  <developer>
    <name>Zijian Liao</name>
    <email>lzj960515@163.com</email>
    <url>zijiancode.cn</url>
  </developer>
</developers>
  1. 在Java项目的pom.xml中配置相应的插件一共需要4个插件
  • maven-source-plugin用于生成Source Jar文件
  • maven-javadoc-plugin 用于生成 javadoc 文档
  • maven-gpg-plugin 用于对工程文件进行签名
  • nexus-staging-maven-plugin 用于将工程发布到中央仓库
<!-- Source -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-source-plugin</artifactId>
  <version>3.2.1</version>
  <executions>
    <execution>
      <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.2.0</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>jar</goal>
      </goals>
      <configuration>
        <doclint>none</doclint>
      </configuration>
    </execution>
  </executions>
</plugin>
<!-- GPG -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-gpg-plugin</artifactId>
  <version>1.6</version>
  <configuration>
    <useAgent>false</useAgent>
  </configuration>
  <executions>
    <execution>
      <phase>verify</phase>
      <goals>
        <goal>sign</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<!-- Nexus Staging Maven -->
<plugin>
  <groupId>org.sonatype.plugins</groupId>
  <artifactId>nexus-staging-maven-plugin</artifactId>
  <version>1.6.7</version>
  <extensions>true</extensions>
  <configuration>
    <serverId>oss</serverId>
    <nexusUrl>https://oss.sonatype.org/</nexusUrl>
    <autoReleaseAfterClose>true</autoReleaseAfterClose>
  </configuration>
</plugin>
  1. 配置Maven的setting.xml文件
<servers>  
  <server>
    <!-- id需要和pom.xml中的nexus-staging-maven-plugin的serverId相同 -->
      <id>oss</id>
      <username>gpg的帐户名</username>
      <password>gpg的密码</password>
    </server>
</servers>
<!-- Mac 需要单独增加该配置 -->
<properties>
  <gpg.executable>gpg2</gpg.executable>
  <gpg.passphrase>gpg的密码</gpg.passphrase>
</properties>
  1. 使用Maven命令发布项目
mvn clean deploy -Dmaven.test.skip=true

如果需要指定Maven环境,可以使用-P 环境名

如果有不需要发布的模块可使用mvn -pl '!easycanal-samples,!com.github.lzj960515:easycanal-sample-spring-boot' clean deploy -Dmaven.test.skip=true-pl表示项目列表,![gourpId:]artifactId表示忽略某个项目[gourpId:]可加可不加,如果需要忽略某个模块的子模块则必须加上,如!com.github.lzj960515:easycanal-sample-spring-boot

查询项目

发布完之后可以直接到https://oss.sonatype.org上查询项目发布情况

等待几个小时后才可在https://search.maven.org/查询项目是否发布到Maven中央仓库

success.png

版本更新

项目版本更新后,直接执行发布命令即可mvn clean deploy -Dmaven.test.skip=true,不必再建立issue,等待一段时间,会自动同步到中央仓库。

目录
相关文章
|
7月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
683 1
|
8月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
2489 1
|
7月前
|
IDE 安全 Java
Lombok 在企业级 Java 项目中的隐性成本:便利背后的取舍之道
Lombok虽能简化Java代码,但其“魔法”特性易破坏封装、影响可维护性,隐藏调试难题,且与JPA等框架存在兼容风险。企业级项目应优先考虑IDE生成、Java Records或MapStruct等更透明、稳健的替代方案,平衡开发效率与系统长期稳定性。
454 115
|
8月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
883 64
|
7月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
9月前
|
Java 区块链 Maven
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
692 3
|
9月前
|
安全 Java 测试技术
Java 大学期末实操项目在线图书管理系统开发实例及关键技术解析实操项目
本项目基于Spring Boot 3.0与Java 17,实现在线图书管理系统,涵盖CRUD操作、RESTful API、安全认证及单元测试,助力学生掌握现代Java开发核心技能。
480 0
|
9月前
|
缓存 Java 数据库
Java 项目分层架构实操指南及长尾关键词优化方案
本指南详解基于Spring Boot与Spring Cloud的Java微服务分层架构,以用户管理系统为例,涵盖技术选型、核心代码实现、服务治理及部署实践,助力掌握现代化Java企业级开发方案。
391 2
|
8月前
|
Java jenkins 应用服务中间件
结合Jenkins与Tomcat,实施Maven项目的自动构建和部署流程。
任何项目构建和部署的自动化流程,总离不开对各个环节精细把控与密切配合。涉及到源代码管理、构建工具、持续集成服务器以及最终的运行时环境的协调。通过上述简洁实用的步骤,可以实现Maven项目从源代码到运行状态的无缝过渡,进而提升软件开发的效率与质量。
431 0

推荐镜像

更多