最近想使用maven发布个jar包,一开始想发布到maven中央库,后来发现很麻烦,国内阿里有个“云效仓库”,没有考察清楚就部署了,后来发现云效仓库只能是私有仓库,要配置专门的连接信息,用户名密码,想下载jar包还得让同组人员申请账号,配置访问权限,然后才能用这个私有库,这就很麻烦。组内合作还是希望尽量无感知使用各项资源。
所以又回去发布jar包到maven中央库,下面是步骤,备忘
1、sonatype注册
https://issues.sonatype
到这里创建sonatype账号,然后创建一个issue,我这个是编辑界面,已经创建完了,按照这个来填。或者参考:上传jar包到maven公共远程中央仓库,这个写的很细了
GroupID:如果是公网的域名,例如com,org等域名相关,需要验证域名
我没有,所以用户GitHub的项目
之后的信息必须有github的开源项目,才能填写,所以先到第二步,创建你的开源项目。
2、Github上创建一个开源项目
名字和你要放到Maven库里的jar包名字最好相关。我开源项目其实不是上传的jar包的源代码,只是挂个名字。
3、回到https://issues.sonatype,补全github信息
然后会让你等待审批,如果GroupID你有对应的域名,比如你GroupID: org.XXX,那你要在http://www.XXX域名里进行设置,证明这个域名是你的。
我没有域名,所以用的github的项目名,io.github.YYY,YYY是我的项目名,看图片提示,要求你在github建一个临时的开源项目,名字是分配给你新建的Issue的号,例如OSSRH-80995,建好以后,把你的Issue设置为“重打开”状态,如果不知道,修改一下你的issue,提交就好了,注意下状态,是不是变为“打开”,这事等几分钟,会有人验证你的新项目OSSRH-80995,证明这是你的账号,然后就给你通过了。
状态为RESOLVED,comments中会发送Congratulations!Welcome to the Central Repository!
你的公共仓库通道打好了。
更改maven的settings.xml以及你的项目的pom.xml,准备上传jar。
4、修改本地Maven的settings.xml
找到你的maven仓库的settings.xml
建议你自己maven,然后绑定到idea,不要用idea自带的maven,后面会有麻烦
另外注意setting.xml位置,users/你的账号/.m2/settings.xml优先级是高于你maven的根目录下conf里的settings.xml文件的。如果有俩,弄清楚哪个生效了。
在本地仓库级别的配置文件中settings.xml添加上面申请的用户名和密码。
<servers>
<server>
<id>ossrh</id>
<username>sonatype账号</username>
<password>sonatype密码</password>
</server>
</servers>
此处的ossrh,是个名字,在pom.xml文件中会用到,这个名字可以改,但是注意两边一致。
5、修改项目的pom.xml
- 配置上传仓库,注意这里的ossrh就是对应上面settings.xml里的ossrh
两个仓库,一个发布仓库repository,一个临时仓库snapshotRepository
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
- 配置插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<!--配置生成Javadoc包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<configuration>
<encoding>UTF-8</encoding>
<aggregate>true</aggregate>
<charset>UTF-8</charset>
<docencoding>UTF-8</docencoding>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</execution>
</executions>
</plugin>
注意这里的maven-gpg-plugin,因为还要做GPG的验证,下一步配置
6、GPG签名文件生成
Sonatype要求所有部署的文件都需要使用GPG / PGP.asc签名,并且每个文件都必须包含一个包含签名的文件,所以我们需要生成密钥对
参考开源的一小步----开源类库传至Maven中央仓库,这里写的很详细
这里我们用到Gpg4win来生成密钥
Gpg4win下载地址:https://www.gpg4win/download.html
下载后安装,然后创建秘钥
我一开始没填,后来发现好像不行,老实点填了吧,还要求你填写个密码,请一定记住,因为发布jar包的时候需要用到。
这就创建好了,然后需要把密钥上传到服务器。公共的秘钥服务器
-
查询公钥
gpg --list-key 查询一下公钥
公钥就是上面红框里的 192C31BD58C54。。。。。。 -
发布公钥
gpg --keyserver hkp://keyserver.ubuntu:11371 --send-keys 公钥
注意:网上经常有用hkp://pool.sks-keyservers 作为公钥服务器的,这个服务器,我怎么都发布不成功,后来发现2021年下半年这个网站不提供服务了,所以只要hkp://keyserver.ubuntu:11371成功了就行了,别纠结
- 查询是否成功
gpg --keyserver hkp://keyserver.ubuntu:11371 --recv-keys 公钥
看到这个就是成功了
又近了一步,加油!!!!
7、打包
上你的项目,如果是idea的话,直接点击deploy,弹出对话框,让你输入GPG密码,输入提交,如果顺利,就会报提交成功了,不顺利,就得差错,一步步往回找。发布成功后,到这里可以看到你的发布的jar
登录 https://s01.oss.sonatype/#stagingRepositories
选择要发布的jar,在图示这里,这里只是暂存仓库,还需要两步,第一步,选择你的jar,点击close按钮,等着,如果过1分钟回来,看到Release按钮还是灰色的,看看下面的activity里找错!
就在jar的下方会显示你close产生的信息,如图所示,这里打红叉的就是出错的地方,下图没有红叉
按照红叉错误,百度修
反复几次,修正好了,“Release”按钮可以用了,点击他,就发布到maven2仓库里
此时你就能在https://repo1.maven/maven2/中找到你的依赖
也就是下面这个仓库里
<mirror>
<id>central-repos1</id>
<name>Central Repository 2</name>
<url>http://repo1.maven/maven2/</url>
</mirror>
我是在这里界面查找
搜到了
但是在公共仓库 https://mvnrepository/里没搜到,据说要几天以后才有。然后等了2天,应该是1天多,这里就可以看到我的包了,:)开心
8、下载
换了台机器,下载刚Release的包
- 用命令mvn dependency:get下载
- 或者用idea,放在项目里用maven下载
具体怎么做的,见我另一篇博文,《从maven中央仓库下载jar包》
<dependency>
<groupId>io.github.XXX</groupId>
<artifactId>XXXX-mybatis-dynamic</artifactId>
<version>1.0</version>
</dependency>
9、删除已经发布的jar
各种理由,当你想删除已经发布的资源,想再发布同样版本的资源时,会发现
**这个是不允许的**
!!!
一旦发布,不能撤销不能删除,只能升级版本。
更多推荐
发布项目到Maven中央库
发布评论