分类: Java工具开发

Windows 提交 jar 包到 Maven 中央仓库

主要就是简单记一下提交流程和注意事项。

先注册

注册过程就不说了,地址在这: https://issues.sonatype.org/secure/Signup!default.jspa,注册完成后记好用户名密码。

注册完成后创建 issue

中央仓库的项目是有专人审核维护的,所以需要建一个 issue 告诉他们想提交什么项目。

地址在这:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

标题填项目名,GroupId 和 pom.xml 里一致,ProjectUrl 填项目主页,ScmUrl 填代码仓库地址。

唯一需要注意的是 GroupId,需要有域名的所有权,没有的话开起来会麻烦点

审核一般很快,审核通过后管理员会把 issue 状态置为 Resolved,然后评论内容里告诉你下一步干啥。

内容可能类似:

  • Deploy snapshot artifacts into repository https://oss.sonatype.org/content/repositories/snapshots
  • Deploy release artifacts into the staging repository https://oss.sonatype.org/service/local/staging/deploy/maven2
  • Promote staged artifacts into repository 'Releases'
  • Download snapshot and release artifacts from group https://oss.sonatype.org/content/groups/public
  • Download snapshot, release and staged artifacts from staging group https://oss.sonatype.org/content/groups/staging

同时管理员还要求第一次提交后来这评论一下,因为还有到中央仓库的同步没开,所以还继续以下操作。

本机新建 GPG 密钥对

Windows 操作系统去地址 https://www.gpg4win.org/download.html 下载管理工具,然后通过菜单 文件-新建密钥对 创建密钥,选择个人密钥输入邮箱密码等不停下一步就可以了。

密钥新建完后需要发布,可以直接右键发布到服务器,也可以在导出公钥后去对应网站上传

Maven 提交 JAR 包

提交 JAR 包需要先修改 maven/settings.xmlpom.xml,先在 settings.xml 里添加服务器信息:

<servers> 
    <server>
      <id>服务器名称,sonatype 之类的</id>
      <username>sonatype账号</username>
      <password>sonatype密码</password>
    </server> 
</servers>

修改 pom.xml,添加 licenses scm developers 等节点信息同时修改版本号为固定版本,不能包含 SNAPSHOT,否则也能提交但不能发布。节选例如:

    <!-- 略过好多结点 -->
    <version>1.0.0</version>

    <!-- 略过好多结点 -->
    <licenses>
        <license>
            <name>The Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>

    <developers>
        <developer>
            <name>用户名</name>
            <email>邮箱地址</email>
            <organization>组织名</organization>
            <organizationUrl>官网,直接 GitHub 主页也可以</organizationUrl>
        </developer>
    </developers>

    <!-- 和 issues 里面填写的信息一致就可以了 -->
    <scm>
        <connection>scm:git:https://github.com/xxxxx.git</connection>
        <developerConnection>scm:git:https://github.com/xxxx.git</developerConnection>
        <url>https://github.com/xxxx</url>
        <tag>1.0.0</tag>
    </scm>

    <!-- 略过好多结点 -->
    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>2.2.1</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>2.9.1</version>
                        <configuration>
                            <additionalparam>-Xdoclint:none</additionalparam>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <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>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
            <distributionManagement>
                <snapshotRepository>
                    <!--- 和 setting.xml 配置的 server.id一致 -->
                    <id>sonatype</id>
                    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
                </snapshotRepository>
                <repository>
                    <id>sonatype</id>
                    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                </repository>
            </distributionManagement>
        </profile>

    </profiles>

</project>

配置信息修改完直接执行:

mvn clean deploy -P release verify

执行过程中会提示输入密码,用新建 GPG 密钥时的密码,执行成功后就可以进行下一步了。

中央仓库执行发布

使用 sonatype 账号登录 https://oss.sonatype.org 点击左侧的 Staging Repositories,右侧列表会看到自己的执行记录,如果没有仔细以上环节是否正常。

选中自己的执行记录,点击顶部 Close,刷新页面如果 Close 失败可以去操作日志看失败原因。

如果 Close 成功,继续选中,点击 Release 即发布成功了。

通知管理员开启同步

发布成功后返回 issue 主页,提交已发布的评论,可以简单点的 Release success.,通知到即可。

All Done!

当 issue 的状态置为 RESOLVED 的时候就是提交成功了,就可以去中央仓库查找应用 jar 包了。

Recent Posts

Docker 容器非 root 用户监听 80 端口

起因是基于 CentOS 的 …

2 年 之前

基于 Docker 定时打印文件

先说背景,喷墨打印机有个很大的…

3 年 之前

Java 运行时反射获取来自继承的泛型

背景 正常情况下 Java 的…

3 年 之前

Java 基于 ByteBuddy 重写系统当前时间

背景 一般单元测试时总会有些代…

3 年 之前

华硕 B450F-Gaming 主板 I211-AT 网卡驱动安装

事情起因是买了块华硕的 ROG…

3 年 之前

PHP 安装 Memcached 扩展

登录服务器挨步执行: # su…

4 年 之前