将 Java 项目推送到 Maven 中央仓库实践


欢迎关注个人博客:http://www.mydlq.clubhtml


最新写了个开源项目,考虑到发布到 Maven 中央仓库实践一下,想一想发布成功的话只要有 Maven 的地方就能拉取,不存在 Jar 包不在没法下载的问题。因为第一次将项目提交到 Maven 中央仓库,网上知识良莠不齐到最后碰见了不少坑,这里记录一下这个实践过程。前端

1、将项目推送到 Github

在 GitHub 上新建一个项目仓库,而后将要发送到 Maven 中央仓库的代码推送到 Github。这方面资料较多,这里不过多叙述。java

2、注册 Sonatype 帐户

进入 https://issues.sonatype.org/secure/Dashboard.jspa 注册JIRA帐号,按提示完善我的信息。git

3、登陆 Sonatype 建立工单

登陆 https://issues.sonatype.org/secure/Dashboard.jspa ,点击建立按钮来建立一个新的 issues 工单github

内容以下,填写必填部分便可,而后等待审核。web

4、确认域名

等待一段时间就会收到一封邮件,内容以下:spring

[ https://issues.sonatype.org/browse/OSSRH-48958?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Central OSSRH 更新了 OSSRH-48958:
------------------------------
状态: Waiting for Response  (原值: 开放)

Do you own the domain mydlq.club? If so, please verify ownership via one of the following methods:
* Add a TXT record to your DNS referencing this JIRA ticket: OSSRH-48958 (Fastest)
* Setup a redirect to your Github page (if it does not already exist)

If you do not own this domain, please read:
http://central.sonatype.org/pages/choosing-your-coordinates.html
You may also choose a groupId that reflects your project hosting, in this case, something like io.github.my-dlq or com.github.my-dlq

Swagger Kubernetes is a program for document aggregation of Swagger standardized service apis in a Kubernetes cluster.
----------------------------------------------------------------------------------------------------------------------

关键字: OSSRH-48958
URL: https://issues.sonatype.org/browse/OSSRH-48958
项目: Community Support - Open Source Project Repository Hosting
问题类型: New Project
报告人: mydlq
经办人: Joel Orlina
优先级: 重要

Swagger Kubernetes is a program for document aggregation of Swagger standardized service apis in a Kubernetes cluster. Service discovery under a Namespace of Kubernetes can be automatically performed. The interface of the Swagger API specification will be integrated and filtered. The service will be delegated to the service by zuul reverse proxy, and the Swagger API information will be aggregated and displayed by the Swagger UI.

意思就是询问你该 GroupId 设置的域名是否为你本身所拥有,若是是就须要证实一下,两种方法apache

  • 一、设置github page当作域名。
  • 二、在域名 DNS 解析中添加一条类型为 Txt 的记录。

因为本人有本身的域名,因此设置使用了第二种方法添加 NDS 解析记录,这里添加了记录为 OSSRH-48958,类型为 TxT,值为 https://issues.sonatype.org/browse/OSSRH-48958 的一条解析记录信息。ubuntu

而后打开邮件中提到的地址 https://issues.sonatype.org/browse/OSSRH-48958 进入该 issues,在里面回复本身拥有该域名,且设置了 DNS 解析。api

5、配置 GPG

一、下载 GPG

打开 https://www.gpg4win.org/ 下载 GPG,而后一步步安装。

安装完成后会看到桌面上多了个 Kleopatra 图标,这个程序是 GnuPG 的前端程序,这里咱们将它打开。

二、配置密钥对

打开 Kleopatra 后,点击新建密钥对

输入姓名和邮箱

最后确认新建

过程当中须要本身输入一个8位以上的密码,请记住该密码,后面还须要用到。 输入完成之后就会提示下面信息。

三、上传公钥到 GPS key-servers

打开命令提示符窗口,输入下面命令将证书发送到远程服务器

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys  243EFB60D8F930B391CA194EA40663B00BDC6CA1

6、配置项目

要想将项目发送到 Maven 中央仓库,须要对项目进行一些设置来符合发布条件。

一、配置 Strings.xml

配置 maven 目录 conf 文件夹中的 settings.xml 文件,设置一个 server,里面添加 JIRA 的帐号和密码。

<servers>
   <server>
      <id>ossrh</id>
      <username>JIRA帐号</username>
      <password>JIRA密码</password>
   </server>
</servers>

二、配置 Pom.xml

Pom.xml 配置一些必要的信息,例如 Maven 文档插件、打包插件、GPG验证插件等,以下:

> 能够查看个人项目的 GitHub 地址: https://github.com/my-dlq/swagger-kubernetes-maven ,pom 参数照着修改便可,顺便点下 Start 星,Thanks。

<!--?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>club.mydlq</groupid>
    <artifactid>swagger-kubernetes</artifactid>
    <version>2.1.0</version>
    <packaging>jar</packaging>

    <name>swagger-kubernetes</name>
    <url>https://github.com/my-dlq/swagger-kubernetes</url>
    <description>swagger api doc for kubernetes discovery.</description>

    <!--licenses信息-->
    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <!--scm信息-->
    <scm>
        <url>http://mydlq.club</url>
        <connection>scm:git:https://github.com/my-dlq/swagger-kubernetes.git</connection>
        <developerconnection>scm:git:https://github.com/my-dlq/swagger-kubernetes.git</developerconnection>
    </scm>

    <!--发布者信息-->
    <developers>
        <developer>
            <name>mydlq</name>
            <email>mynamedlq@163.com</email>
            <organization>http://mydlq.club</organization>
            <organizationurl>http://mydlq.club</organizationurl>
        </developer>
    </developers>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceencoding>UTF-8</project.build.sourceencoding>
    </properties>

    <dependencies>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-web</artifactid>
            <version>2.1.0.RELEASE&lt;</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- doc plugin,Maven API文档生成插件 -->
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-javadoc-plugin</artifactid>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- resources plugin,Maven 资源插件 -->
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-source-plugin</artifactid>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- compiler plugin,Maven 编译插件 -->
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-compiler-plugin</artifactid>
                <version>3.3</version>
                <configuration>
                    <source>${java.version}
                    <target>${java.version}</target>
                    <showwarnings>true</showwarnings>
                </configuration>
            </plugin>
            <!-- gpg 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>
            <!--staging puglin,用于自动执行发布阶段(免手动)-->
  	         <plugin>
                <groupid>org.sonatype.plugins</groupid>
                <artifactid>nexus-staging-maven-plugin</artifactid>
                <version>1.6.7</version>
                <extensions>true</extensions>
                <configuration>
                    <serverid>ossrh</serverid>
                    <nexusurl>https://oss.sonatype.org/</nexusurl>
                    <autoreleaseafterclose>true</autoreleaseafterclose>
                </configuration>
            </plugin>
            <!-- release plugin,用于发布到release仓库部署插件 -->
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-release-plugin</artifactid>
                <version>2.4.2</version>
            </plugin>
        </plugins>
    </build>

    <!-- 这里引入 Settings.xml 中设置的用户名、密码 -->
    <distributionmanagement>
        <snapshotrepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotrepository>
        <repository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionmanagement>

</project>

三、设置编码

若是Maven编译doc因编码缘由出错,能够在环境变量设置变量 JAVA_TOOL_OPTIONS,值为 UTF-8 来改变编码方式。

  • JAVA_TOOL_OPTIONS
  • -Dfile.encoding=UTF-8

7、发送项目到 Maven 中央仓库

一、登陆 Nexus Repositories Manager

在发布以前要求必须有登陆 Nexus Repositories 的信息,因此发布前提早登陆 Nexus Repositories

登陆 https://oss.sonatype.org 其中用户名、密码就是 JIRA 的用户名、密码。

二、发布项目

执行 maven 命令,部署项目到 Maven 仓库,过程当中须要输入以前设置的 GPG 密码,输入一下便可。

$ mvn clean deploy

三、查看发布过程

回到 Nexus Repositories Manager,选择 Staging Repositories 暂存库,根据发布时间查找到你提交的 Jar 信息。而后查看 Actives 里面的执行信息,注意执行部署过程如今流行都交给 Maven 自动部署插件执行,网上一些老办法是进入这里面手动执行,很是不推荐这样作,由于这样很是容易部署发生问题。

> 注意: 在 Maven 执行发布过程当中才能看到,若是已经 release 完成,暂存库中可能找不到。

正常的部署流程应该为:open阶段—>close阶段—>release阶段 执行完成这三个阶段就会发布到中央仓库,等会会受到邮件通知

[ https://issues.sonatype.org/browse/OSSRH-48958?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Central OSSRH 更新了 OSSRH-48958:
------------------------------

Central sync is activated for club.mydlq. After you successfully release, your component will be published to Central, typically within 10 minutes, though updates to search.maven.org can take up to two hours.

意思为 Release 成功,大概等十分钟或者几个就能在中央仓库查询到该 Jar 信息,不过对search.maven.org的更新可能须要两个小时。

四、在 Issues 中回复已经 Release 完成

打开以前提交 Issues 地址,后面回复已经 Release 完成

五、查看本身发布的项目

发布成功后能够进入 https://search.maven.org 网址查询本身发布的 Jar,若是未查到等几个小时再此查询。


欢迎关注个人博客:http://www.mydlq.club

相关文章
相关标签/搜索