怎样提交本地jar到Maven中央仓库(windows)

最近在开发推送SDK,在做push sdk的服务端sdk的java版本的时候,就一直想把client能构建到Maven中央仓库,方便开发者使用。

项目git地址 : https://github.com/MOBX/mobpush-api-java-client 有需要可以参考下,主要是里面的pom.xml ,下面的也会用到。

先上结果 http://search.maven.org/#artifactdetails%7Ccom.mob.sdk.push ,其实网上也有很多教程,但是还是不是很清晰,好像都是一个版本来的,没有给我等使用windows屌丝的具体指明完整道路,顾记录此文章。

下面说下具体步骤把 :

1、注册sonatype账号

因为Maven中央仓库是由sonatype免费给维护的,所以需要到 https://issues.sonatype.org/secure/Signup!default.jspa 注册sonatype账号。一定要记得此账号密码,后面配置maven的servers节点需要用到此账号和密码。

还需要记录一个地址 : https://oss.sonatype.org (这个后面issues里面也有会连接的)

这个就是私服仓库了,可以在里面查看到jar的状态等信息

《怎样提交本地jar到Maven中央仓库(windows)》 image

2、创建发布申请的issues

可以到地址https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134 去发布申请的issues,里面有需要注意填写的内容

  • Group Id : 这个填写你maven项目的Group Id 就好了,但是有注意这个可能在审核issues的时候,工作人员会询问是否有group id的所有权。

《怎样提交本地jar到Maven中央仓库(windows)》 image

  • SCM url : 这个就需要填写源代码的路径,需要审核issues的人员能访问,我使用的是github (https://github.com/MOBX/mobpush-api-java-client) 这个也是需要后面在项目pom.xml里面配置scm标签的。

  • Project URL: 这个我这里填写的是官网地址

其他没啥了,可以的话按照要求填写相关的描述即可,提交和需要等待审核,这个需要点时间,应该要看情况吧,我提交的issues审核很快就通过,自己多关注下哈,也会有邮件通知的。

等到issues的状态变更为Resolved就可以了,看到下面这个图表示你已经成功通过了开始的审核,后面就可以进行构建上传了。

《怎样提交本地jar到Maven中央仓库(windows)》 image

3、使用 GPG 生成密钥对

需要下载一个GPG 来进行文件加密,windows 可以到地址 https://www.gpg4win.org/download.html 下载 按照步骤安装即可。

在安装目录的bin下打开Kleopatra即可

《怎样提交本地jar到Maven中央仓库(windows)》 image

在窗口上进入 文件–> 新建密钥对–>创建个人OpenPGP密钥对

《怎样提交本地jar到Maven中央仓库(windows)》 image

输入名称和邮箱,一直下一步下一步到输入密码界面,这里的密码需要记住,是后面maven打包的时候需要输入的确认密码

《怎样提交本地jar到Maven中央仓库(windows)》 image

4、maven配置和pom.xml配置

在您maven的setting.xml 加入如下配置:

  <servers> 
    <server>
      <id>自定义id,需要和后面pom.xml对应即可,如ossrh</id>
      <username>您申请的sonatype账号</username>
      <password>sonatype账号对应密码</password>
    </server> 
  </servers>

在您项目的pom.xml 增加其中没有的配置(如下是 mobpush client for java 的一个pom.xml例子):

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mob.sdk.push</groupId>
    <artifactId>mobpush-api-java-client</artifactId>

        <!-- 请不要使用SNAPSHOT版本不然后面步骤不能继续-->
    <version>1.0.0</version>
    <name>mobpush-api-java-client</name>
    <url>https://github.com/MOBX/mobpush-api-java-client</url>
    <description> MobPush API for Java </description>

    <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>hlliu</name>
            <email>hlliu@youzu.com</email>
            <organization>mob</organization>
            <organizationUrl>http://www.mob.com</organizationUrl>
        </developer>
    </developers>

  <!-- 保持和申请的issues里面填写的scm一致 -->
    <scm>
        <connection>
         scm:git:https://github.com/MOBX/mobpush-api-java-client.git
      </connection>
        <developerConnection>
         scm:git:https://github.com/MOBX/mobpush-api-java-client.git
      </developerConnection>
        <url>https://github.com/MOBX/mobpush-api-java-client</url>
        <tag>1.0.0</tag>
    </scm>



    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <github.global.server>github</github.global.server>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jdkVersion>1.6</jdkVersion>
        <jdkVersion.test>1.6</jdkVersion.test>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.31</version>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
                      <!-- 打包的 -P参数 -->
            <id>release</id>
            <build>
                <plugins>
                    <!-- Source -->
                    <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>
                    <!-- Javadoc -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>2.9.1</version>
                                                <!-- -Xdoclint:none 是为了生存apidoc的时候检查不必太严格-->
                        <configuration>
                            <additionalparam>-Xdoclint:none</additionalparam>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- GPG  打包插件-->
                    <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>
                                        <!--- 此处的id需要和setting.xml 配置的service的id一致 -->
                    <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>
        </profile>

    </profiles>

</project>

注意:以上 pom.xml 必须包括:name、description、url、licenses、developers、scm 等基本信息,此外,使用了 Maven 的 profile 功能,只有在 release 的时候,创建源码包、创建文档包、使用 GPG 进行数字签名。此外,请注意pom.xml里面注释需要保持一致的地方。

5、构建发布jar

进入您项目执行maven命令

mvn clean deploy -P release verify -Dgpg.passphrase={您PGP密码}

-P release是构建环境,需要和pom.xml里面配置一致,在执行过程中,会弹出提示框让你输入PGP的密码,输入后确认即可,看网络情况,我本地上传比较快,大概1分钟就好了

6、在OSS中发布构件

以为进行第5步就OK了,还需要继续呢,需要在OSS里面发布构建,登陆 https://oss.sonatype.org (使用 sonatype 申请的账号和密码即可)

《怎样提交本地jar到Maven中央仓库(windows)》 image.png

登陆后选择Staging Repositories ,可以看到您刚上传的的是open状态,勾选后点击上面的Close即可,会弹框确认,确认就好了。

(需要等待N分钟,也许1分钟就好了)

重新刷新本页面,看到您上传的项目是close状态,此时再勾选后选择上面的Release,也会提示弹框确认,确认就好了。

7、通知关闭issues

以上步骤完成后,就等待最终的审核了。到您申请的issues的页面 增加备注 “The component has been successfully released”(告知就好了,怎么写自己看着办),好了 ,确实已经到了最后审核了
我提交的大概1、2个小时就好了,好了也会有邮件通知的。

审核通过后可以到 http://search.maven.org 查看,就如我开始给的结果,over ~

    原文作者:问风尘
    原文地址: https://www.jianshu.com/p/ab287c344d14
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞