前言
最近重构了一下自己的小玩意,由于之前是存到第三方仓库中的jitpack.io
,假如要使用自己的库则需要先在pom.xml
中添加第三方仓库后,才能在dependencies
中添加自己的依赖,比较麻烦。
jitpack.io
https://jitpack.io
而且我遇到了一个问题,在添加了第三方仓库的时候,在构建项目的时候,会把springframework的包也会重新下载一遍,十分久= =不知如何解决,所以更加迫使我想把自己的包存放到官方仓库中。然后就去搜了一下,第一页里10篇文章有8篇是一摸一样的,有一些直接复制的里面图片都403了
然后就对着教程做,疯狂出现奇奇怪怪的问题,然后就想起之前看到的一句话
教程里都不出现错误的,顺利的一匹
好久没写文章了,所以就久违地写一篇文章来说一说吧。贯彻一下我的风格,尽量写的详细一点。
但是,本人水平有限,对maven不是很熟悉,对于后续的pom.xml配置我也不是很懂为什么这么做,希望大家能教一下我
好,那就开始吧。
步骤
- 到https://issues.sonatype.org注册一个账号
- 到上面的网站提交一个issue,等待处理
- 安装gpg,(用于对jar进行加密)上传你的密钥到服务器
- 修改maven的setting.xml
- 修改Pom.xml文件
- 使用maven打包你的项目
- 到https://oss.sonatype.org/处理你刚上传的jar
- 到https://issues.sonatype.org找到你刚刚的issue,关掉它
- 等待2小时,然后就可以在https://search.maven.org/搜到你的依赖了
emmmmm确实是麻烦呢
1.注册账号
这个没什么说的就放个图吧(这里的密码要求麻烦的一匹
2.提交issue
当你注册完之后,就可以登陆来到首页,跟着步骤走,提交你的issue
然后你可以查看你的issue,等待被处理,由于我是在晚上近0点的时候提交的,所以可能处理比较快(看别的博客说是时差问题,需要等工作人员上班的时候才会被处理掉
3.安装gpg
gpg的话,可以到https://www.gpg4win.org/下载
安装完之后就可以打开你的cmd,输入gpg,输出下面的东西就安装成功了
然后就可以创建你的key了(实在不知道怎么表述了
输入你的realname(类似于username吧)
输入email
然后最后一部是让你输入passphrase
,就是密码了,记着别忘了
然后输入完passphrase后会给你输出一串key,那个长长的就是了,如果不小心关了可以键入gpg --list-keys
输出你的key
然后下一步就是将你的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版吧,上面会有你刚刚创建的账户
右键点击你的账户,选择红色框框框住的选项,继续就行了
然后大概就成了
4. 修改你的setting.xml
修改maven的setting.xml,在conf文件夹里面
注意:找到你的系统变量配置的maven的路径,修改那里的setting.xml
因为我修改了idea的那个,折腾了我一晚上
在servers
标签下添加以下代码
oss
你在*步骤1*时候注册的账号
你在*步骤1*时候注册的账号的密码
5. 修改pom.xml
我把我自己的pom都发出来了,dalao可以参考下哪些要的哪些不要的吧
据说必须要添加以下的信息,你可以根据你自己的信息修改
com.github.echisan
wpb4j
2.0
wpb4j
a simple java api for weibo picture bed
https://github.com/echisan/wbp4j
jar
The Apache Software License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0.txt
scm:git:[email protected]:echisan/wbp4j.git
scm:git:[email protected]:echisan/wbp4j.git
[email protected]:echisan/wbp4j.git
2.0
echisan
然后添加一个profiles
,学艺不精不是很清楚这个profile是干嘛用的,但是看到网上的是把plugin
放进去了,那我也直接复制粘贴了。。晚点恶补一下,或者知道的可以说一下干嘛用的
release
maven-clean-plugin
3.0.0
org.apache.maven.plugins
maven-source-plugin
3.0.1
package
jar-no-fork
maven-compiler-plugin
3.7.0
maven-surefire-plugin
2.20.1
maven-jar-plugin
3.0.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
org.apache.maven.plugins
maven-compiler-plugin
8
org.apache.maven.plugins
maven-source-plugin
package
jar-no-fork
org.apache.maven.plugins
maven-javadoc-plugin
2.9.1
package
jar
org.apache.maven.plugins
maven-gpg-plugin
1.6
verify
sign
oss
https://oss.sonatype.org/content/repositories/snapshots/
oss
https://oss.sonatype.org/service/local/staging/deploy/maven2/
6. 打包你的应用
到这一步貌似手续都准备好了,可以打包你的应用了。执行以下命令
mvn clean deploy -P release -Dmaven.test.skip=true
然后等maven的一系列骚操作后,就会弹出一个框框让你输入passphrase
,就是刚刚用gpg创建key的那个密码,输入之后,再等maven一顿骚操作后,看到这个就成啦~
如果没有弹出框框输入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包
- 选择
taging Repositories
- 选择你的项目
- close掉
然后系统会验证你的jar包信息,会执行一系列的校验,假如有错误你可以点击下面的错误的位置,看看什么错误再进行处理
假如没有任何问题,你再选中你的项目,点击Release
,然后这一步骤就结束了
8. 关掉你的issue
到https://issues.sonatype.org 找到你刚刚的issue,给他留言,让他把issue close掉
9.0 等待2小时
经过漫长2小时的等待,打开网站 https://search.maven.org/ 搜索你的gourpid就能搜索到啦
点击那个latest Version,右手边就能看到依赖信息啦~
然后迅速去体验在官方仓库导入依赖的快感吧(雾
更新
如果在下次需要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());