IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    发布到 maven 中央仓库-Deploying to the Maven Central Repository

    vacuity发表于 2024-03-08 11:00:23
    love 0
    发布到 maven 中央仓库-Deploying to the Maven Central Repository

    最近,Claude 发布了其最新版本 Claude 3,我计划将其集成到我的聊天网站 AI-Chat (AI-Chat)上。我访问了官方网站,发现只提供了 Python 和 TypeScript 的 SDK。遗憾的是,我在 GitHub 上并没有找到 Java 版本的 SDK。因此,我决定亲自动手编写一个,并且打算将其发布到 Maven 仓库中以便他人使用。
    在寻找发布到 Maven 仓库的教程时,我发现互联网上的大多数指南都已过时。没有办法,我只能自己摸索整个流程。接下来,我将记录整个过程,希望能帮助到有相似需求但又遇到相同困难的其他开发者。

    注意:已经不是在这个网站操作了:https://issues.sonatype.org,现在是在https://central.sonatype.com/,网站上的很多教程依然是前者。

    注册账号

    去Maven Central注册账号

    生成token

    点击右上角头像,选择“View Account”,之后 **Generate User Token
    **,为自己生成一个token信息,记录下来。配置到本地maven的settings.xml:

    <servers>
        <server>
          <id>central</id>
          <username>XXXXX</username>
          <password>CSDCEDEDEDEDE</password>    
        </server>
    </servers>
    

    配置Namespace

    点击右上角头像选择 View Namespace,为自己添加一个Namespace(是你要发布的包的groupid中的域名)。我这边用的是自己的域名,所以直接添加,然后他需要你增加一个TXT的解析记录,添加好点击验证,等待他验证结束就可以了。

    GPG配置

    配置GPG密钥,这部分自行搜索处理 ,也可以参考:Working with PGP Signatures。
    生成之后查看下本地的密钥:

    注意,以下部分的 CA925CD6C9E8D064FF05B4728190C4130ABA0F98 即为后面要用到的keyId

    $ gpg --list-keys
    /home/mylocaluser/.gnupg/pubring.kbx
    ---------------------------------
    pub   rsa3072 2021-06-23 [SC] [expires: 2023-06-23]
          CA925CD6C9E8D064FF05B4728190C4130ABA0F98
    uid           [ultimate] Central Repo Test <central@example.com>
    sub   rsa3072 2021-06-23 [E] [expires: 2023-06-23]
    

    记得要把 gpg key 上传:

    注意 {keyid} 替换为你自己的

    gpg  --keyserver hkps://keyserver.ubuntu.com --recv-keys {keyid}
    

    POM配置

    配置你要上传的项目的pom文件,添加:

    注意修改对应的部分你的项目的实际值

    <name>ai-java-sdk</name>
    <description>a java sdk for ai apis.</description>
    <url>https://github.com/vacuityv/ai-java-sdk</url>
    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>
    <developers>
        <developer>
            <name>xxx</name>
            <email>xxx@icloud.com</email>
        </developer>
    </developers>
    <scm>
        <connection>scm:git:git://github.com/vacuityv/ai-java-sdk.git</connection>
        <developerConnection>scm:git:ssh://github.com:vacuityv/ai-java-sdk.git</developerConnection>
        <url>http://github.com/vacuityv/ai-java-sdk/tree/master</url>
    </scm>
    <distributionManagement>
        <repository>
            <id>central</id>
            <name>central-releases</name>
            <url>https://s01.oss.sonatype.org/</url>
        </repository>
    </distributionManagement>
    
    

    以及:

    注意 {keyid} 替换为你自己的

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.3.0</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.6.3</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <doclint>none</doclint>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                        <configuration>
                            <keyname>{keyid}</keyname>
                            <passphraseServerId>{keyid}</passphraseServerId>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.sonatype.central</groupId>
                <artifactId>central-publishing-maven-plugin</artifactId>
                <version>0.4.0</version>
                <extensions>true</extensions>
                <configuration>
                    <publishingServerId>central</publishingServerId>
                    <tokenAuth>true</tokenAuth>
                    <autoPublish>true</autoPublish>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    

    发布

    至此所有前置操作都结束了,然后直接运行

    mvn deploy
    

    发布,再次过程会验证签名和上传文件。发布成功后在第一步注册的网站点击头像然后点击 “View Deployments” 就可以看到自己发布的文件了

    总结

    本来,将软件包发布到 Maven 中央仓库应该是一项相对规范和普遍的操作。互联网上也确实存在大量的指导教程,但随着时间的推移和流程的更新,我发现当前可见的大多数教程已经不再适用。这一现象导致我在尝试将自己编写的 Java SDK 发布到 Maven 时,花费了大量不必要的时间和精力。
    为此,我决定撰写这篇文章,记录下我在发布过程中的探索和发现。通过这篇文章,我希望能够为那些在同样路径上或将面临类似挑战的开发者们,提供一份实用的参考,从而避免他们重复我的弯路,节省宝贵的时间。
    如果你在使用过程中遇到了问题,也欢迎留言一起探讨。



沪ICP备19023445号-2号
友情链接