引言

Maven作为Java生态系统中最流行的构建工具和依赖管理工具,其核心功能之一就是将构件(Artifact)发布到仓库中供其他开发者使用。而中央仓库(Maven Central Repository)作为Java世界中最重要的公共仓库,拥有数以百万计的开源构件,是每个Java开发者都离不开的基础设施。

将构件发布到中央仓库不仅能让你的项目被全球开发者使用,还能提升项目的可信度和影响力。然而,这个过程涉及多个步骤、复杂的配置和严格的审核机制,许多开发者在初次尝试时都会遇到各种问题。本文将详细介绍从零开始将构件发布到中央仓库的完整流程,并提供常见问题的解决方案。

发布前的准备工作

1. 注册Sonatype账号

Sonatype是中央仓库的维护者,所有发布请求都需要通过Sonatype的JIRA系统进行管理。

访问 https://issues.sonatype.org/ 并注册账号。注册完成后,你需要创建一个新项目(Project)的发布申请。

创建Issue时,选择”Community Support - Open Source Project Repository Hosting”项目类型,然后填写以下信息:

  • Summary: 你的项目名称,例如 “My Awesome Library”
  • Description: 项目的简短描述
  • Group Id: 这是最重要的配置,决定了你的构件坐标。通常使用你的域名倒写,例如 com.github.yourusernameio.github.yourusername。如果你没有自己的域名,可以使用GitHub的命名空间:io.github.yourusername
<!-- 示例:使用GitHub域名的Group Id --> <groupId>io.github.yourusername</groupId> <artifactId>my-awesome-library</artifactId> <version>1.0.0</version> 

创建Issue后,Sonatype团队会审核你的申请。审核通过后,你就可以开始准备发布工作了。

2. 准备GPG签名密钥

中央仓库要求所有发布构件必须经过GPG签名,以确保构件的完整性和来源可信。

安装GPG

在Linux/Mac上:

# Ubuntu/Debian sudo apt-get install gnupg # CentOS/RHEL sudo yum install gnupg # Mac brew install gnupg 

在Windows上,可以从 https://www.gnupg.org/download/ 下载Gpg4win。

生成GPG密钥对

# 生成密钥对 gpg --gen-key # 按照提示输入以下信息: # - 真实姓名 # - 邮箱地址 # - 备注(可选) # - 密码(请牢记,后续签名时需要) # 查看已生成的密钥 gpg --list-secret-keys --keyid-format LONG # 输出示例: # /Users/username/.gnupg/pubring.kbx # --------------------------------- # sec rsa4096/3AA5C34371567BD2 2023-01-01 [SC] # ABCDEF1234567890ABCDEF1234567890ABCDEF12 # uid [ultimate] Your Name <your.email@example.com> # ssb rsa4096/42B317FD4BA89E7A 2023-01-01 [E] 

上传公钥到密钥服务器

# 使用密钥ID上传(替换为你的密钥ID) gpg --keyserver keyserver.ubuntu.com --send-keys 3AA5C34371567BD2 # 验证上传是否成功 gpg --keyserver keyserver.ubuntu.com --search-keys 3AA5C34371567BD2 

3. 配置Maven的settings.xml

~/.m2/settings.xml 中配置Sonatype的认证信息:

<settings> <servers> <server> <id>ossrh</id> <username>你的Sonatype用户名</username> <password>你的Sonatype密码</password> </server> </servers> <profiles> <profile> <id>ossrh</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <!-- GPG签名配置 --> <gpg.executable>gpg</gpg.executable> <gpg.passphrase>你的GPG密钥密码</gpg.passphrase> </properties> </profile> </profiles> </settings> 

项目配置详解

1. 基本POM配置

在项目的 pom.xml 中添加必要的配置:

<project> <modelVersion>4.0.0</modelVersion> <!-- 基本信息 --> <groupId>io.github.yourusername</groupId> <artifactId>my-awesome-library</artifactartifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>My Awesome Library</name> <description>A brief description of your awesome library</description> <url>https://github.com/yourusername/my-awesome-library</url> <!-- 许可证信息 --> <licenses> <license> <name>Apache License 2.0</name> <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> </licenses> <!-- 开发者信息 --> <developers> <developer> <id>yourusername</id> <name>Your Name</name> <email>your.email@example.com</email> </developer> </developers> <!-- SCM信息 --> <scm> <connection>scm:git:git://github.com/yourusername/my-awesome-library.git</connection> <developerConnection>scm:git:ssh://github.com/yourusername/my-awesome-library.git</developerConnection> <url>https://github.com/yourusername/my-awesome-library</url> <tag>HEAD</tag> </scm> </project> 

2. 添加Maven发布插件

pom.xml<build> 部分添加发布插件:

<build> <plugins> <!-- 源码Javadoc插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <!-- 源码Javadoc插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.2.1</version> <executions> <execution> <id>attach-sources</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> <!-- Nexus Staging插件 --> <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.13</version> <executions> <execution> <id>default-deploy</id> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl> <autoReleaseAfterClose>true</autoReleaseAfterClose> </configuration> </plugin> </plugins> </build> 

3. 完整的POM配置示例

下面是一个完整的 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>io.github.yourusername</groupId> <artifactId>my-awesome-library</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>My Awesome Library</name> <description>A brief description of your awesome library</description> <url>https://github.com/yourusername/my-awesome-library</url> <licenses> <license> <name>Apache License 2.0</name> <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> </licenses> <developers> <developer> <id>yourusername</id> <name>Your Name</name> <email>your.email@example.com</email> </developer> </developers> <scm> <connection>scm:git:git://github.com/yourusername/my-awesome-library.git</connection> <developerConnection>scm:git:ssh://github.com/yourusername/my-awesome-library.git</developerConnection> <url>https://github.com/yourusername/my-awesome-library</url> <tag>HEAD</tag> </scm> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!-- 你的依赖 --> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> <configuration> <additionalOptions>-Xdoclint:none</additionalOptions> </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> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <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> <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.13</version> <executions> <execution> <id>default-deploy</id> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl> <autoReleaseAfterClose>true</autoReleaseAfterClose> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>release</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.5.3</version> <configuration> <tagNameFormat>v@{project.version}</tagNameFormat> <pushChanges>false</pushChanges> <localCheckout>true</localCheckout> </configuration> </plugin> </plugins> </build> </profile> </profiles> </project> 

发布流程详解

1. 本地测试发布

在正式发布到中央仓库之前,建议先在本地进行测试:

# 清理并打包 mvn clean package # 运行所有测试 mvn test # 生成Javadoc和源码包 mvn javadoc:jar source:jar # 本地安装(用于测试) mvn clean install 

2. 发布到Sonatype仓库

执行以下命令发布到Sonatype的仓库:

# 发布到Sonatype仓库 mvn clean deploy -P release # 或者使用完整的命令(包含所有阶段) mvn clean deploy 

这个命令会执行以下操作:

  1. 编译代码
  2. 运行测试
  3. 生成Javadoc和源码包
  4. 使用GPG对所有构件进行签名
  5. 将所有构件上传到Sonatype的Staging仓库

3. 在Sonatype网站上操作

发布完成后,登录到 https://s01.oss.sonatype.org/ :

  1. 查看Staging仓库

    • 点击左侧菜单的 “Staging Repositories”
    • 你会看到一个状态为 “Open” 的仓库,包含你刚上传的构件
  2. 关闭仓库

    • 选中你的仓库
    • 点击 “Close” 按钮
    • 系统会进行一系列验证(签名验证、POM验证等)
    • 如果验证通过,仓库状态会变为 “Closed”
  3. 发布仓库

    • 在仓库状态为 “Closed” 时,点击 “Release” 按钮
    • 构件会被发布到中央仓库的测试环境(测试仓库)

4. 等待同步到中央仓库

发布到Sonatype后,需要等待同步到中央仓库:

  • 测试仓库:通常在30分钟到2小时内可用
  • 正式仓库:通常在2-4小时后可用

你可以通过以下URL验证构件是否可用:

  • 测试仓库:https://s01.oss.sonatype.org/content/repositories/snapshots/
  • 正式仓库:https://repo.maven.apache.org/maven2/

5. 验证发布结果

使用以下命令验证构件是否可以被正确解析:

# 创建一个测试项目 mkdir test-project && cd test-project # 创建pom.xml cat > pom.xml << 'EOF' <?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> <groupId>test</groupId> <artifactId>test</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>io.github.yourusername</groupId> <artifactId>my-awesome-library</artifactId> <version>1.0.0</version> </dependency> </dependencies> </project> EOF # 尝试解析依赖 mvn dependency:resolve 

常见问题解决方案

问题1:GPG签名失败

错误信息

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.6:sign (sign-artifacts) on project my-awesome-library: GPG command execution failed: Cannot run program "gpg" 

解决方案

  1. 确保GPG已安装并添加到PATH: “`bash

    检查gpg是否可用

    gpg –version

# 如果未安装,请先安装 # Ubuntu/Debian: sudo apt-get install gnupg # CentOS/RHEL: sudo yum install gnupg # Mac: brew install gnupg

 2. **检查settings.xml中的GPG配置**: ```xml <properties> <gpg.executable>gpg</gpg.executable> <gpg.passphrase>你的密码</gpg.passphrase> </properties> 
  1. 如果使用GPG2
     <properties> <gpg.executable>gpg2</gpg.executable> <gpg.passphrase>你的密码</gpg.passphrase> </properties> 

问题2:Group Id验证失败

错误信息

[ERROR] GroupId 'com.example' does not match any of the allowed patterns 

解决方案

  1. 使用正确的Group Id格式

    • 如果你有域名:com.yourcompany
    • 如果没有域名:io.github.yourusernamecom.github.yourusername
  2. 在Sonatype JIRA中确认Group Id

    • 确保你在JIRA中申请的Group Id与POM中的一致
    • 如果需要修改Group Id,需要在JIRA中更新申请

问题3:Javadoc生成失败

错误信息

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:3.5.0:jar (attach-javadocs) on project my-awesome-library: Unable to parse configuration of mojo org.apache.maven.plugins:maven-javadoc-plugin:3.5.0:jar for parameter #methods: Cannot find 'methods' in class org.apache.maven.plugins.javadoc.JavadocJar 

解决方案

  1. 添加Javadoc忽略错误配置

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> <configuration> <!-- 忽略Javadoc错误 --> <additionalOptions>-Xdoclint:none</additionalOptions> <!-- 或者忽略特定检查 --> <additionalOptions>-Xdoclint:none -quiet</additionalOptions> </configuration> </plugin> 
  2. 修复Javadoc注释

    • 确保所有public方法都有Javadoc注释
    • 检查参数和返回值的注释格式

问题4:上传失败(认证错误)

错误信息

[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.13:deploy (default-deploy) on project my-awesome-library: Authentication failed for https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ 401 Unauthorized 

解决方案

  1. 检查settings.xml中的认证信息

    <servers> <server> <id>ossrh</id> <username>你的Sonatype用户名</username> <password>你的Sonatype密码</password> </server> </servers> 
  2. 确保serverId与pom.xml中的配置一致

    <configuration> <serverId>ossrh</serverId> <!-- 必须与settings.xml中的id一致 --> <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl> </configuration> 

问题5:Staging仓库关闭失败

错误信息

[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.13:deploy (default-deploy) on project my-awesome-library: Remote staging failed: Staging ruleset 12345 failed. Ruleset: Release Repository Rules. Rule: Signature check failed. 

解决方案

  1. 验证GPG签名: “`bash

    检查签名文件是否存在

    ls -la target/*.asc

# 验证签名 gpg –verify target/my-awesome-library-1.0.0.jar.asc

 2. **确保公钥已上传到密钥服务器**: ```bash # 重新上传公钥 gpg --keyserver keyserver.ubuntu.com --send-keys 3AA5C34371567BD2 # 等待几分钟后重试 
  1. 检查密钥是否过期

    # 查看密钥信息 gpg --list-keys 

问题6:版本冲突

错误信息

[ERROR] Version 1.0.0 already exists in repository 

解决方案

  1. 使用新的版本号

    <version>1.0.1</version> 
  2. 遵循语义化版本规范

    • 主版本号.次版本号.修订号
    • 例如:1.0.0 → 1.0.1(修复bug)→ 1.1.0(新增功能)→ 2.0.0(破坏性变更)

问题7:依赖无法解析

错误信息

[ERROR] Could not resolve dependencies for project: Could not find artifact io.github.yourusername:my-awesome-library:jar:1.0.0 

解决方案

  1. 等待同步完成

    • 发布后需要等待2-4小时才能在中央仓库解析
  2. 检查仓库URL

    • 确保使用的是正确的仓库URL
    • 中央仓库:https://repo.maven.apache.org/maven2/
  3. 检查构件是否真的发布

    • 访问 https://repo.maven.apache.org/maven2/io/github/yourusername/my-awesome-library/1.0.0/

问题8:POM验证失败

错误信息

[ERROR] Project object model does not pass validation 

解决方案

  1. 验证POM格式

    # 使用Maven验证POM mvn help:effective-pom 
  2. 检查必需字段

    • 确保包含:groupId, artifactId, version, name, description, url, licenses, developers, scm
  3. 使用Maven的POM验证工具

    # 安装maven-enforcer-plugin <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.2.1</version> <executions> <execution> <id>enforce</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <requireMavenVersion> <version>3.0</version> </requireMavenVersion> <requireJavaVersion> <version>1.8</version> </requireJavaVersion> </rules> </configuration> </execution> </executions> </plugin> 

高级配置与最佳实践

1. 自动化发布流程

使用GitHub Actions自动化发布:

# .github/workflows/release.yml name: Release to Maven Central on: push: tags: - 'v*' jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 11 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'temurin' - name: Cache Maven dependencies uses: actions/cache@v3 with: path: ~/.m2/repository key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 - name: Import GPG key run: | echo "${{ secrets.GPG_PRIVATE_KEY }}" | gpg --batch --import echo "${{ secrets.GPG_PASSPHRASE }}" | gpg --passphrase-fd 0 --yes --pinentry-mode loopback --list-keys - name: Configure Maven settings run: | mkdir -p ~/.m2 cat > ~/.m2/settings.xml << EOF <settings> <servers> <server> <id>ossrh</id> <username>${{ secrets.OSSRH_USERNAME }}</username> <password>${{ secrets.OSSRH_PASSWORD }}</password> </server> </servers> <profiles> <profile> <id>ossrh</id> <properties> <gpg.executable>gpg</gpg.executable> <gpg.passphrase>${{ secrets.GPG_PASSPHRASE }}</gpg.passphrase> </properties> </profile> </profiles> </settings> EOF - name: Publish to Maven Central run: mvn clean deploy -P release -Dgpg.passphrase=${{ secrets.GPG_PASSPHRASE }} env: OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} 

2. 使用Maven Release插件

Maven Release插件可以简化版本管理:

# 准备发布(自动升级版本号、提交代码、打标签) mvn release:prepare # 执行发布(部署到仓库) mvn release:perform 

配置Maven Release插件:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.5.3</version> <configuration> <tagNameFormat>v@{project.version}</tagNameFormat> <pushChanges>false</pushChanges> <localCheckout>true</localCheckout> <autoVersionSubmodules>true</autoVersionSubmodules> </configuration> </plugin> 

3. 多模块项目的发布

对于多模块项目,需要在父POM中配置:

<project> <groupId>io.github.yourusername</groupId> <artifactId>parent-project</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <modules> <module>module-a</module> <module>module-b</module> </modules> <distributionManagement> <repository> <id>ossrh</id> <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> <snapshotRepository> <id>ossrh</id> <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.5.3</version> <configuration> <autoVersionSubmodules>true</autoVersionSubmodules> </configuration> </plugin> </plugins> </build> </project> 

4. 快照版本(Snapshot)发布

如果需要发布快照版本用于测试:

<distributionManagement> <snapshotRepository> <id>ossrh</id> <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> 

发布快照:

mvn clean deploy 

快照版本会自动部署到快照仓库,不会经过Staging流程。

5. 签名配置优化

如果不想在settings.xml中明文存储密码,可以使用环境变量:

<properties> <gpg.passphrase>${env.GPG_PASSPHRASE}</gpg.passphrase> </properties> 

然后在部署时设置环境变量:

export GPG_PASSPHRASE=your_passphrase mvn clean deploy -P release 

6. 排除特定文件的签名

如果需要排除某些文件的签名:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.6</version> <configuration> <excludes> <exclude>**/*.zip</exclude> <exclude>**/*.tar.gz</exclude> </excludes> </configuration> </plugin> 

7. 使用Maven属性管理版本

使用Maven属性统一管理版本:

<properties> <project.version>1.0.0</project.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.javadoc.plugin.version>3.5.0</maven.javadoc.plugin.version> <maven.source.plugin.version>3.2.1</maven.source.plugin.version> <maven.gpg.plugin.version>1.6</maven.gpg.plugin.version> <nexus.staging.plugin.version>1.6.13</nexus.staging.plugin.version> </properties> 

8. 验证发布前的检查清单

在执行发布前,运行以下检查:

# 1. 检查所有测试是否通过 mvn clean test # 2. 检查Javadoc是否能正常生成 mvn javadoc:javadoc # 3. 检查源码包是否能正常生成 mvn source:jar # 4. 检查GPG签名是否正常 mvn gpg:sign # 5. 检查POM是否有效 mvn help:effective-pom # 6. 检查依赖树 mvn dependency:tree # 7. 检查是否有未提交的更改 git status # 8. 检查版本号是否正确 mvn help:evaluate -Dexpression=project.version 

故障排除高级技巧

1. 详细日志输出

如果遇到问题,可以使用详细日志:

# 使用X参数输出详细日志 mvn clean deploy -X # 或者只输出特定插件的日志 mvn clean deploy -Dmaven.gpg.plugin.logLevel=DEBUG 

2. 跳过测试快速验证

在调试配置时,可以临时跳过测试:

mvn clean deploy -DskipTests -P release 

3. 使用dry-run模式

Maven Release插件支持dry-run模式:

mvn release:prepare -DdryRun=true 

4. 清理失败的发布

如果发布失败,需要清理Staging仓库:

# 使用nexus-staging-maven-plugin丢弃失败的发布 mvn nexus-staging:drop -P release 

5. 手动上传(备用方案)

如果Maven插件无法正常工作,可以手动上传:

  1. 使用 mvn clean package 生成所有构件
  2. 登录到 https://s01.oss.sonatype.org/
  3. 手动上传所有文件到Staging仓库
  4. 在网站上执行Close和Release操作

总结

将构件发布到中央仓库是一个系统性的工程,需要仔细准备和配置。关键要点包括:

  1. 准备工作:注册Sonatype账号、生成GPG密钥、配置Maven settings
  2. 项目配置:正确配置POM文件,包含所有必需的信息
  3. 发布流程:本地测试 → 发布到Sonatype → Close → Release → 等待同步
  4. 问题排查:掌握常见问题的解决方案,使用详细日志进行调试

通过遵循本文的指南,你应该能够成功将你的构件发布到中央仓库。记住,第一次发布可能会遇到各种问题,保持耐心,仔细阅读错误信息,大多数问题都有现成的解决方案。

最后,建议在发布前先在测试环境中充分验证,确保所有配置正确无误。发布成功后,你的构件将被全球开发者使用,这将为你的项目带来更大的价值和影响力。