侧边栏壁纸
  • 累计撰写 3 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

发布 Java 库到 Maven Central 的完整流程指南

mozihe
2025-05-15 / 0 评论 / 0 点赞 / 7 阅读 / 0 字

发布 Java 库到 Maven Central 的完整流程指南

适用于:Sonatype Central Portal(https://central.sonatype.com)


1. 注册账号并验证域名

  1. 访问 https://central.sonatype.com/account
  2. 使用 GitHub 或 Google 登录
  3. 前往“Namespaces”页面,申请你的 groupId(例如 com.mozihe
  4. 添加 DNS TXT 记录完成验证(例如 @.mozihe.com = your_token
  5. 等待验证通过,Namespace 状态变为 Verified

2. 配置 GPG 签名

生成 GPG 密钥:

gpg --full-generate-key
gpg --list-secret-keys --keyid-format LONG

记录你的 GPG Key ID,例如:ABCDE123456

上传公钥:

gpg --keyserver keyserver.ubuntu.com --send-keys ABCDE123456

3. 本地开发准备

项目目录结构:

src/
pom.xml

确保 pom.xml 包含:

  • groupId / artifactId / version
  • license 信息
  • scm 信息(GitHub 地址)
  • developer 信息
  • source/javadoc 生成插件
  • GPG 签名插件

示例:

<?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>

    <!-- 基础构件坐标 -->
    <groupId>com.mozihe</groupId>
    <artifactId>onnx-spring-boot-starter</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <name>onnx-spring-boot-starter</name>
    <description>Spring Boot Starter for ONNX Runtime in Java</description>
    <url>https://github.com/mozihe/onnx-spring-boot-starter</url>

    <!-- 开源协议 -->
    <licenses>
        <license>
            <name>MIT License</name>
            <url>https://opensource.org/licenses/MIT</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <!-- 源码托管地址 -->
    <scm>
        <url>https://github.com/mozihe/onnx-spring-boot-starter</url>
        <connection>scm:git:git://github.com/mozihe/onnx-spring-boot-starter.git</connection>
        <developerConnection>scm:git:ssh://git@github.com:mozihe/onnx-spring-boot-starter.git</developerConnection>
    </scm>

    <!-- 作者信息 -->
    <developers>
        <developer>
            <id>mozihe</id>
            <name>mozihe</name>
            <email>zhujunheng2005@gmail.com</email>
        </developer>
    </developers>

    <!-- Java 编译版本和 GPG 签名配置 -->
    <properties>
        <java.version>17</java.version>
        <gpg.keyname>你的 GPG id</gpg.keyname>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.microsoft.onnxruntime</groupId>
            <artifactId>onnxruntime</artifactId>
            <version>1.12.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- GPG 签名 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals><goal>sign</goal></goals>
                    </execution>
                </executions>
            </plugin>

            <!-- 打包源码 jar -->
            <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>

            <!-- 打包 Javadoc jar -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.3.1</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals><goal>jar</goal></goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>


4. 设置 Maven 的 settings.xml

路径:~/.m2/settings.xml

<settings>
  <servers>
    <server>
      <id>ossrh</id>
      <username>token-your-username</username>
      <password>your-generated-password</password>
    </server>
  </servers>
  <profiles>
    <profile>
      <id>release</id>
      <properties>
        <gpg.executable>gpg</gpg.executable>
        <gpg.passphrase>你的GPG密码</gpg.passphrase> 
        <gpg.keyname>你的GPG id</gpg.keyname>
      </properties>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>release</activeProfile>
  </activeProfiles>
</settings>

5. 构建、签名并生成构件

mvn clean verify -P release

确保在 target/ 中生成以下文件:

  • yourlib-1.0.0.jar
  • yourlib-1.0.0-javadoc.jar
  • yourlib-1.0.0-sources.jar
  • yourlib-1.0.0.jar.asc
  • yourlib-1.0.0-javadoc.jar.asc
  • yourlib-1.0.0-sources.jar.asc
  • yourlib-1.0.0.pom
  • yourlib-1.0.0.pom.asc

6. 生成 MD5 / SHA1 校验文件

创建 staging 目录:

mkdir -p staging/com/mozihe/onnx-spring-boot-starter/1.0.0
cp target/onnx-spring-boot-starter-1.0.0* staging/com/mozihe/onnx-spring-boot-starter/1.0.0/
cd staging/com/mozihe/onnx-spring-boot-starter/1.0.0

生成校验:

for f in *.jar *.pom; do
  openssl md5 "$f" | awk '{print $2}' > "$f.md5"
  openssl sha1 "$f" | awk '{print $2}' > "$f.sha1"
done

7. 打包 zip 上传包

cd staging
zip -r onnx-spring-boot-starter-1.0.0-bundle.zip com/

8. 发布到 Maven Central

  1. 访问 https://central.sonatype.com/publish
  2. 点击 “Publish Component”
  3. 填写相关信息
  4. 上传打好的 zip 包
  5. 验证通过后点击 “Publish”

9. 发布后验证

  • Maven 下载测试:
mvn dependency:get -Dartifact=com.mozihe:onnx-spring-boot-starter:1.0.0
0

评论区