maven 第一次发布jar到中央仓库

一、步骤

1.注册

https://issues.sonatype.org/secure/Signup!default.jspa

2.登录

https://issues.sonatype.org/login.jsp

3.创建issue

https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134创建好的就是如下这种

image.png
image.png

创建完之后会收到一封邮件,然后我们创建好的issue就如下,后面跟官方的一些交互和问答基本上都是在这里完成https://issues.sonatype.org/browse/OSSRH-49415

4.创建完毕后等待通知

我这里遇到这样的一个问题,后来收到的官方的回复如下

Please create a public repo called https://github.com/simonalong/OSSRH-49415 to verify github account ownership.
If you do not own this github account, please read:
http://central.sonatype.org/pages/choosing-your-coordinates.html

好像是我还得创建一个公共的仓库,名字叫OSSRH-49415,去自己的账号中创建一个这样的公共仓库就好了,创建完之后在issue中回复下就好,比如

image.png
image.png

最后会收到对应的回复,比如

image.png
image.png

整个评论回复如下

image.png
image.png

5.生成公钥

mac 进行安装gpg

brew install -v gpg

生成密钥

gps --gen-key

image.png
image.png

输入o,就是表示确认,然后两次密码确认

image.png
image.png

查看公钥

gpg --list-key

image.png
image.png

6.发布公钥

主要是将我们的公钥发布给官方,让其能够解析我们本地用私钥加密后的数据

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 你的公钥

比如

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 14A4854E9312A84AF051C61494254BDBB854A311

查看是否上传成功

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 你的公钥

image.png
image.png

7.配置maven

我这里新建一个settings.xml,然后在里面添加对应的账户信息

<servers>
    <server>
        <id>oss</id>
        <username>用户名</username>
        <password>密码</password>
    </server>
</servers>

8.代码中配置代码发布器

<distributionManagement>
  <snapshotRepository>
    <id>oss</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
  </snapshotRepository>
  <repository>
    <id>oss</id>
    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
  </repository>
</distributionManagement>

9.上传

这里上传一定不要点击idea的deploy按钮,因为deploy和maven-gpg-plugin结合的不是很好,那个gpg插件无法运行,一定要用客户端或者iterm即可。运行这样运行

mvn clean deploy --settings /Users/zhouzhenyong/.m2/setting_maven_center.xml

其中会提示输入gpg的密码,输入即可

10.查看

https://oss.sonatype.org/#stagingRepositories我们可以去这里查看,首先登陆,账号是我们注册的用户名和密码,然后点击左侧的“Staging Respositories(暂存仓库)”,然后在右上角输入groupId,就可以搜索我们的这个

image.png
image.png

如果在这里能够找到,说明已经发布到这里算是成功了,但是还需要工作人员进行审计,需要在我们的Issue中通知一下工作人员即可在下面的评论中,添加这样的一句评论

The component has been successfully released,please confirm

11.关闭释放仓库

这里其实是暂存库,我们发布到这里之后,如果发布成功,则进行关闭最后就可以了,关闭的时候,其中确认框中输入该项目的介绍信息,这个是会在界面上展示用于搜索的

image.png
image.png

关闭后,查看下面,主要是用于审核,如果成功了,则为下面的。

image.png
image.png

这里也遇到了一些问题,具体的问题看下面的问题即可,关闭完成的话,点击release,也就是将当前的这个库释放,并自动发送到中央仓库

image.png
image.png

12.回复issue

当我们发布完成之后,我们可以在issue下面回复一条说明自己已经完成了组件的发布,请求确认,比如我的:

Although I have encountered some problems, finaly I have released my staging repo.The component has been successfully released,please confirm, thanks very much

13.查看中央仓库

当那边的工作人员审批完成之后,就可以将这个issue关闭了,一般过十分钟或者两个小时左右,我们就可以去中央仓库https://search.maven.org/中查看,应该就可以看到我们的这个项目了,对于更加流行的仓库https://mvnrepository.com,可能需要好几个星期之后才会看到,主要是同步慢。我这边是过了一天之后,这边就可以查看了

image.png
image.png

14.以后的发布

以后如果发布该项目,则直接maven发布即可,然后close,然后release即可。不用像上面一样创建issue了,如果发布的项目跟该项目group相同,则按照maven发布->close->release即可,如果不同则要开始注册issue了。不过对于每次发布都手动close和release有点麻烦的话,可以使用nexus-staging-maven-plugin这个插件,但是建议第一次不要使用该插件,手动执行是可以填写一些描述的,但是这个插件执行是不会有任何再输入的,而是一次性就执行完,最后等十几分钟就直接发到仓库中心了。

附录:

1.完整的pom参考

pom.xml 中必须包括:name、description、url、licenses、developers、scm 等基本信息,使用了 Maven 的 profile 功能,只有在 release 的时候才创建源码包、文档包、使用 GPG 进行数字签名。

<?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>com.github.simonalong</groupId>
    <artifactId>mikilin</artifactId>
    <packaging>jar</packaging>
    <version>1.4.0</version>

    <name>Mikilin</name>
    <url>https://github.com/SimonAlong/Mikilin</url>
    <description>对象属性核查工具</description>

    <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>zhouzhenyong</name>
            <email>simonalongs@126.com</email>
            <roles>
                <role>developer</role>
            </roles>
        </developer>
    </developers>

    <scm>
        <connection>scm:git:git@github.com:SimonAlong/Mikilin.git</connection>
        <developerConnection>scm:git:git@github.com:SimonAlong/Mikilin.git</developerConnection>
        <url>git@github.com:SimonAlong/Mikilin.git</url>
    </scm>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>

        <!--spock测试框架-->
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>1.2-groovy-2.4</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>groovy-all</artifactId>
                    <groupId>org.codehaus.groovy</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.4.8</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Source -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <attach>true</attach>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Javadoc -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.4</version>
                <configuration>
                    <show>private</show>
                    <nohelp>true</nohelp>
                    <charset>UTF-8</charset>
                    <encoding>UTF-8</encoding>
                    <docencoding>UTF-8</docencoding>
                </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>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <distributionManagement>
        <snapshotRepository>
            <id>oss</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        </snapshotRepository>
        <repository>
            <id>oss</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>

</project>

pom.xml 中必须包括:name、description、url、licenses、developers、scm 等基本信息,使用了 Maven 的 profile 功能,只有在 release 的时候才创建源码包、文档包、使用 GPG 进行数字签名。

参考:

https://www.jianshu.com/p/8c3d7fb09bce
https://www.jianshu.com/p/8c3d7fb09bce
https://www.jianshu.com/p/d0e43416aaf6
https://www.jianshu.com/p/d0e43416aaf6
https://www.iteblog.com/archives/1807.html
https://www.iteblog.com/archives/1807.html
https://zhuanlan.zhihu.com/p/41650855
https://zhuanlan.zhihu.com/p/41650855
https://my.oschina.net/u/2335754/blog/476676
https://my.oschina.net/u/2335754/blog/476676

问题:

1.公钥上传不上去

如果遇到上传公钥上传不上去的问题,可以查看这里

2.maven-gpg-plugin问题

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.6:sign (sign-artifacts) on project mikilin: Exit code: 2 -> [Help 1]

最终的原因是不能用idea 自带的那个终端,<br />注意:!!!!!!!!!!!!!不要使用idea自带的终端,真想说一百字的脏话,尝试了好久,各种问题都尝试了,还有就是要在.bashrc中添加如下的一个即可

export GPG_TTY=$(tty)

3.xxx.asc文件找不到

这个asc文件其实是gpg文件生成的,也就是上面maven-gpg-plugin文件是必须要生效才能生成这些文件的<br />[图片上传失败...(image-25c101-1561878176712)]<br />

4.版本上传注意点

第一次不能上传SNAPSHOT版本

来源:https://www.jianshu.com/p/354f66ed4f89

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345