如何用idea把自己的Jar包上传到 maven 官方仓库中,利用idea工具亲测验证。

 总体来说我也是结合本站各位同学写的操作步骤执行,但是过程中遇到了很多问题。现回顾整理记录下整过过程。以备后续同学借鉴。

目标:把自己开发的工具jar包上传至maven官方中心库,以供其他人dependency引用。

一、准备

开始要注意这个几个Maven相关地址:

① https://issues.sonatype.org 工单管理地址,就是申请上传资格和groupId 的地方。

② https://oss.sonatype.org/#welcome  构件仓库,把jar包上传到这里,Release 之后就会同步到maven中央仓库。

③ http://search.maven.org/  最终表现在可以在这里搜索到。

部分网址第一次打开有点慢,请稍等。

二、创建工单

https://issues.sonatype.org 注册一个帐号(已经有请忽略),账号密码要记住,下面登录账号密码还要用这个。

可参考地址:https://www.sojson.com/blog/250.html

注意:如果您在创建时发现弹出框中,没有关于group Id 、project url等填写地方,那么说明首次进入方式可能不对,这块我也吃亏了(英文不好的同学推荐谷歌浏览器翻译),

可通过此地址进入:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134#

还不行参考官网介绍:https://central.sonatype.org/pages/ossrh-guide.html

等到审核通过状态会变为RESOLVED ,第一次审核要一天左右 。

注意:其实整个过程都可以和issues的互动交流,不会的百度翻译后再发。

例如我用的自己域名证书证明域名 www.iussoft.com 是我的,沟通截图如下:

图上最后这段英文大概意思是:

  • 你的配置已经完成了,可以进入工作了。
  • 上传快照版本的地址为….
  • 上传发布版本的地址为…
  • 暂存库中是用来为发布做准备的。
  • 下载快照以及发布版本的地址为…
  • 下载快照、发布以及暂存库的地址为…
  • 另外当你第一次上传到库中的时候请在这里说一下你已经上传了(只有第一次的时候,后面不需要,第一次他那边会进行一些配置)

三、GPG环境的安装

安装过程,我就不细说了,网上很多大拿都写过。可参考这些地址:

https://www.sojson.com/blog/250.html

https://blog.csdn.net/hupoling/article/details/78511899

https://blog.csdn.net/cc_want/article/details/77943340

我自己本次cmd内创建gpg大概最终输出:
gpg: key 546767CAA6532AB0 marked as ultimately trusted
public and secret key created and signed.
pub   rsa2048 2018-08-28 [SC] [expires: 2020-08-27]
      A48B4D0CA1D660DA5966C119546767CAA6532AB0
uid                      hexin <hexin*******@163.com>
sub   rsa2048 2018-08-28 [E] [expires: 2020-08-27]

其中 546767CAA6532AB0 就是申请的key

1)查看我的key

gpg --list-keys

最后注意 keyserver 上传到服务端:

2)上传命令例如:[末尾参数替换自己key分别执行下面命令]

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 546767CAA6532AB0
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 546767CAA6532AB0

3)查看是否上传成功命令:[l末尾参数替换自己key分别执行下面命令]

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 546767CAA6532AB0
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 546767CAA6532AB0

四、配置Maven Settings.xml & pom.xml

我这块也是耗时最多的(主要也是第一次整),中间也和issues互动交流过遇到的问题。主要参考下面的地址;

https://central.sonatype.org/pages/requirements.html

我的最终Settings.xml配置:

<servers>
...
    <server>
        <id>sonatype-nexus-snapshots</id> <!-- 自定义设置,但是后面要用 -->
        <username>https://issues.sonatype.org官网注册用户名称</username>
        <password>https://issues.sonatype.org官网注册用户密码</password>
    </server>
    <server>
        <id>sonatype-nexus-staging</id> <!-- 自定义设置,但是后面要用 -->
        <username>https://issues.sonatype.org官网注册用户名称</username>
        <password>https://issues.sonatype.org官网注册用户密码</password>
    </server>
...
<servers>

其实可以配置一组被共用就行,我为了区分就分开配置了,两组账户和密码信息一样即可。

我的最终项目的pom.xml配置:

最好使用maven快照版本,至于和发布版本的区别参考介绍地址:https://www.cnblogs.com/wuchanming/p/5484091.html

<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>com.iussoft</groupId>
    <artifactId>iussoft-api</artifactId>
    <version>3.0.0-SNAPSHOT</version>

    <packaging>jar</packaging>
    <name>${project.groupId}:${project.artifactId}</name>
    <description>
        Iussoft Open API for Java
        Copyright (C) http://www.iussoft.com
        All rights reserved.
    </description>
    <url>http://www.iussoft.com</url>

    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <spring.framework.version>4.3.7.RELEASE</spring.framework.version>
      <java.version>1.7</java.version>
      <maven.compiler.source>${java.version}</maven.compiler.source>
      <maven.compiler.target>${java.version}</maven.compiler.target>
    </properties>

    <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>iussoft</name>
            <email>hexin********@163.com</email>
        </developer>
    </developers>
    <scm>
        <connection>scm:git:[email protected]:iu******orm.git</connection>
        <developerConnection>scm:git:[email protected]:iu******orm.git</developerConnection>
        <url>https://gitee.com/ius******orm</url>
        <tag>1.0</tag>
    </scm>
    <distributionManagement>
        <snapshotRepository>
            <id>sonatype-nexus-snapshots</id> <!-- 等于上面Settings.xml中server的id值。-->
            <name>oss Snapshots Repository</name>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>sonatype-nexus-staging</id> <!-- 等于上面Settings.xml中server的id值。-->
            <name>oss Staging Repository</name>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>

  <dependencies>
      ......
  </dependencies>
    
    <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <archive>
                            <addMavenDescriptor>false</addMavenDescriptor>
                        </archive>
                    </configuration>
                </plugin>
                <!-- 必须配置 source-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>2.2.1</version>
                    <executions>
                        <execution>
                            <id>attach-sources</id>
                            <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.10.3</version>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!--  必须配置 sonatype-->
                <plugin>
                    <groupId>org.sonatype.plugins</groupId>
                    <artifactId>nexus-staging-maven-plugin</artifactId>
                    <version>1.6.7</version>
                    <extensions>true</extensions>
                    <configuration>
                        <serverId>sonatype-nexus-staging</serverId> <!-- 等于上面Settings中server的id值。-->
                        <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                        <autoReleaseAfterClose>true</autoReleaseAfterClose>
                    </configuration>
                </plugin>
                <!-- 必须配置  GPG-->
                <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>
            </plugins>
    </build>
</project>

几点注意事项:

1、developers和scm信息:最好用你代码所在git的账户信息和git地址信息。

2、distributionManagement中的信息:id保持一样,注意别多空格。

3、plugins内插件配置,source、javadoc、sonatype、gpg等,注意先maven下载相关引用jar。

4、<autoReleaseAfterClose>true</autoReleaseAfterClose>配置是标识Release自动发布,但是我们首次发布后,最好再去之前issues.sonatype.org上提交的工单反馈下。

五、部署、上传

1)CMD命令窗口:部署命令执行可以使用:

mvn deploy -Dmaven.test.skip=true -e

2)idea工具配置及执行

配置完成后,先clean再deploy,同时会分别打包jar,pom,javadoc,sources等信息,若有问题会失败,请先解决错误。

然后上传时输入之前创建gpg时设置的密码。

如上图,第一个success表示部署成功(上传成功)此时可以在https://oss.sonatype.org/ 登录查看信息,登录信息和 issues注册的一样。

最终可以按照自定义的group Id搜索最新提交的版本信息。如下图我的3.0.2;

等待发布成功,其实在https://oss.sonatype.org/content/groups/public/ 这个里面就能找到。

而想在central中看到,一般第一次和issues提交工单沟通后,就是我发布完了。有时候自动就回复了。大概回复如下。

大概意思2个小时左右就可以看到了。

六、项目中应用

一般我们在项目开发阶段为了方便团队合作,推荐使用快照版。而正式上线或者版本稳定的推荐使用发布版,具体介绍参考:

https://www.cnblogs.com/wuchanming/p/5484091.html

项目pom.xml配置

1)首先需要启用快照库

方式一:修改每个项目pom.xml

    <!-- 开发版推荐使用快照库、正式版删除如下repository配置 -->
    <repositories>
        <repository>
            <id>nexus</id>
            <name>Nexus Mirror</name>
            <url>https://oss.sonatype.org/content/groups/public/</url>
            <snapshots>
                <enabled>true</enabled><!-- 启用 -->
                <updatePolicy>always</updatePolicy><!-- 实时更新 -->
            </snapshots>
        </repository>
    </repositories>

方式二:修改统一配置文件settings.xml

参考地址:https://blog.csdn.net/shenzhen_zsw/article/details/78409917

2)引用配置

    <dependencies>
        <dependency>
        <groupId>com.iussoft</groupId>
        <artifactId>iussoft-api</artifactId>
        <version>2.0.3-SNAPSHOT</version> <!-- 使用SNAPSHOT版-->
        </dependency>
    </dependencies>

七、总结

1)一般遇到问题,可以在网上搜索资料,排查。本人推荐最后是直接和https://issues.sonatype.org/官网的工单上和工作人员进行互动(可能花费时间长点,但是能给你相关正确的参考地址)。

2)group id命名 和OSSRH相关操作,最好参考https://central.sonatype.org/pages/ossrh-guide.html

3)登录账号密码最好别有@符号。

4)deploy时报403错误是,及时反馈issues官网工单,让其改权限(我在这块一直以为是自己本地配置问题)。

5)deploy时报错,* Missing Signature: '*****.jar.asc' does not exist for '***.jar'.等错误时,其实是无法用gpg进行jar文件签名生成对应的asc文件。这种情况可以排查本地gpg环境是否安装,配置正确;同时排查下生成的key是否已经上传到keyserver服务端。

6)整过过程连接国外网站,网络断断续续,或者比较缓慢,需要耐心等待。

7)开发过程中因为版本不稳定,推荐使用快照库,等部署或者稳定后使用发布版。

猜你喜欢

转载自blog.csdn.net/hexin8888/article/details/82222960