惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
博客园_首页
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
小众软件
小众软件
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
发布java包到 maven 中央仓库 - 少数派
2024-04-08 · via 少数派

最近,Claude 发布了其最新版本 Claude 3,我计划将其集成到我的聊天网站 AI-Chat (由于某些原因此处不贴链接)上。我访问了官方网站,发现只提供了 Python 和 TypeScript 的 SDK。遗憾的是,我在 GitHub 上并没有找到 Java 版本的 SDK。因此,我决定亲自动手编写一个,并且打算将其发布到 Maven 仓库中以便他人使用。y)上。我访问了官方网站,发现只提供了 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 时,花费了大量不必要的时间和精力。
为此,我决定撰写这篇文章,记录下我在发布过程中的探索和发现。通过这篇文章,我希望能够为那些在同样路径上或将面临类似挑战的开发者们,提供一份实用的参考,从而避免他们重复我的弯路,节省宝贵的时间。
如果你在使用过程中遇到了问题,也欢迎留言一起探讨。