教你将自己的jar包发布到maven官方仓库(超详细用爱发电版)

前言

最近重构了一下自己的小玩意,由于之前是存到第三方仓库中的jitpack.io,假如要使用自己的库则需要先在pom.xml中添加第三方仓库后,才能在dependencies中添加自己的依赖,比较麻烦。

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

而且我遇到了一个问题,在添加了第三方仓库的时候,在构建项目的时候,会把springframework的包也会重新下载一遍,十分久= =不知如何解决,所以更加迫使我想把自己的包存放到官方仓库中。然后就去搜了一下,第一页里10篇文章有8篇是一摸一样的,有一些直接复制的里面图片都403了
image

然后就对着教程做,疯狂出现奇奇怪怪的问题,然后就想起之前看到的一句话

教程里都不出现错误的,顺利的一匹

好久没写文章了,所以就久违地写一篇文章来说一说吧。贯彻一下我的风格,尽量写的详细一点。
但是,本人水平有限,对maven不是很熟悉,对于后续的pom.xml配置我也不是很懂为什么这么做,希望大家能教一下我
好,那就开始吧。

步骤

  1. https://issues.sonatype.org注册一个账号
  2. 到上面的网站提交一个issue,等待处理
  3. 安装gpg,(用于对jar进行加密)上传你的密钥到服务器
  4. 修改maven的setting.xml
  5. 修改Pom.xml文件
  6. 使用maven打包你的项目
  7. https://oss.sonatype.org/处理你刚上传的jar
  8. https://issues.sonatype.org找到你刚刚的issue,关掉它
  9. 等待2小时,然后就可以在https://search.maven.org/搜到你的依赖了
image

emmmmm确实是麻烦呢

1.注册账号

这个没什么说的就放个图吧(这里的密码要求麻烦的一匹

image

2.提交issue

当你注册完之后,就可以登陆来到首页,跟着步骤走,提交你的issue

image

然后你可以查看你的issue,等待被处理,由于我是在晚上近0点的时候提交的,所以可能处理比较快(看别的博客说是时差问题,需要等工作人员上班的时候才会被处理掉

image

3.安装gpg

gpg的话,可以到https://www.gpg4win.org/下载
安装完之后就可以打开你的cmd,输入gpg,输出下面的东西就安装成功了

image

然后就可以创建你的key了(实在不知道怎么表述了
输入你的realname(类似于username吧)
输入email
然后最后一部是让你输入passphrase,就是密码了,记着别忘了

image

然后输入完passphrase后会给你输出一串key,那个长长的就是了,如果不小心关了可以键入gpg --list-keys输出你的key

image

然后下一步就是将你的key发布到服务器(至于为什么需要这一步我就母鸡了,有一些博文倒是没看到这一步= =),可以输入下面的命令

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

然后再输入命令查看是否发布成功了
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 你的key

然后如果运气好的话你大概能成功,反正我是没有成功了反正我是result no data

不成功的话可以往下看这里的,如果成功的话就跳过这一步吧。在你安装完gpg的时候,你会发现多了一个这样的界面,大概是gpg的ui版吧,上面会有你刚刚创建的账户

image

右键点击你的账户,选择红色框框框住的选项,继续就行了


image

image

然后大概就成了

4. 修改你的setting.xml

修改maven的setting.xml,在conf文件夹里面
注意:找到你的系统变量配置的maven的路径,修改那里的setting.xml
因为我修改了idea的那个,折腾了我一晚上

image

image

servers标签下添加以下代码

    <server>
        <id>oss</id>
        <username>你在*步骤1*时候注册的账号</username>
        <password>你在*步骤1*时候注册的账号的密码</password>
    </server>

5. 修改pom.xml

我把我自己的pom都发出来了,dalao可以参考下哪些要的哪些不要的吧

据说必须要添加以下的信息,你可以根据你自己的信息修改

    <groupId>com.github.echisan</groupId>
    <artifactId>wpb4j</artifactId>
    <version>2.0</version>

    <name>wpb4j</name>
    <description>a simple java api for weibo picture bed</description>
    <url>https://github.com/echisan/wbp4j</url>

    <packaging>jar</packaging>

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

    <scm>
        <url>scm:git:git@github.com:echisan/wbp4j.git</url>
        <connection>scm:git:git@github.com:echisan/wbp4j.git</connection>
        <developerConnection>git@github.com:echisan/wbp4j.git</developerConnection>
        <tag>2.0</tag>
    </scm>

    <developers>
        <developer>
            <name>echisan</name>
        </developer>
    </developers>

然后添加一个profiles,学艺不精不是很清楚这个profile是干嘛用的,但是看到网上的是把plugin放进去了,那我也直接复制粘贴了。。晚点恶补一下,或者知道的可以说一下干嘛用的

<profiles>
        <profile>
            <id>release</id> <!-- 这个id有用的,当然也能自定义的吧 -->
            <build>
                <pluginManagement>
                <!-- 这个pluginManagement里的是我一把梭复制的, 各位dalao懂的就自己按实际整把= =这里我实在不懂 -->
                    <plugins>
                        <plugin>
                            <artifactId>maven-clean-plugin</artifactId>
                            <version>3.0.0</version>
                        </plugin>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-source-plugin</artifactId>
                            <version>3.0.1</version>
                            <executions>
                                <execution>
                                    <phase>package</phase>
                                    <goals>
                                        <goal>jar-no-fork</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                        <plugin>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <version>3.7.0</version>
                        </plugin>
                        <plugin>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <version>2.20.1</version>
                        </plugin>
                        <plugin>
                            <artifactId>maven-jar-plugin</artifactId>
                            <version>3.0.2</version>
                        </plugin>
                        <plugin>
                            <artifactId>maven-install-plugin</artifactId>
                            <version>2.5.2</version>
                        </plugin>
                        <plugin>
                            <artifactId>maven-deploy-plugin</artifactId>
                            <version>2.8.2</version>
                        </plugin>
                    </plugins>
                </pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <source>8</source>
                            <target>8</target>
                        </configuration>
                    </plugin>
                    <!-- Source -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <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>
                        <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>
            <!-- 这个也是必须要的 以下两个<id>代码块中的id要与 setting.xml中的id一致 -->
            <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>
        </profile>
    </profiles>

6. 打包你的应用

到这一步貌似手续都准备好了,可以打包你的应用了。执行以下命令
mvn clean deploy -P release -Dmaven.test.skip=true
然后等maven的一系列骚操作后,就会弹出一个框框让你输入passphrase,就是刚刚用gpg创建key的那个密码,输入之后,再等maven一顿骚操作后,看到这个就成啦~

image

如果没有弹出框框输入passphrase的话可以尝试使用下面命令,当然这也是网上的方法了,尽管我输入的是下面的代码,还是弹出框框让我输入密码了= =
mvn clean deploy -P release -Dmaven.test.skip=true -Dgpg.passphrase=你的passphrase

如果出现upload到oss错误,提示401的话,你再确定一下你修改的setting.xml是否正确,是否是你系统环境的那个maven。
至于有别的问题的话我就不清楚了,我就出现了上面这样的错误。

7. 去处理你刚刚deploy的jar包

登陆https://oss.sonatype.org/ 去处理你刚刚deploy的jar包

  1. 选择taging Repositories
  2. 选择你的项目
  3. close掉
image

然后系统会验证你的jar包信息,会执行一系列的校验,假如有错误你可以点击下面的错误的位置,看看什么错误再进行处理

image

假如没有任何问题,你再选中你的项目,点击Release,然后这一步骤就结束了

image

8. 关掉你的issue

https://issues.sonatype.org 找到你刚刚的issue,给他留言,让他把issue close掉

image
image

image

9.0 等待2小时

经过漫长2小时的等待,打开网站 https://search.maven.org/ 搜索你的gourpid就能搜索到啦

image

点击那个latest Version,右手边就能看到依赖信息啦~


image

然后迅速去体验在官方仓库导入依赖的快感吧(雾

image

更新

如果在下次需要deploy到官方仓库的时候,不需要再去提issue了,直接用上面的deploy命令,然后重复第7个步骤就好了

参考感谢

非常感谢以下文章在当初给予的帮助

如何把自己的Jar包上传到 maven 官方仓库中,Maven上传图文讲解
发布Maven构件到中央仓库
将 Smart 构件发布到 Maven 中央仓库

这里打个小广告,因为要上传这个到官方仓库所以才有了这篇文章
这是一个使用微博图床的java api,可以在自己的博客中使用~
https://github.com/echisan/wbp4j

使用起来也是挺方便的~

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

推荐阅读更多精彩内容