有时候想要让自己的项目也能快速地分享给别人使用,每次都打包成jar未免有些麻烦,最好的办法就是用Maven仓库来自动管理依赖,只需将你的最新版本上传到Maven仓库,那么所有使用者都能在第一时间更新。
Maven可以很轻松地通过一些配置来上传,但Gradle这边就稍微有一点点麻烦了,不过也不难。
1.准备工作
1.1.注册SonaType
先打开 https://issues.sonatype.org/ 并且创建一个账号,如果有就直接登录
点击导航栏上的Create创建一个新项目
如果你没有项目地址,可以填写和SCM一样的地址。
1.2.生成GPG
首先下载一个秘钥生成器 https://gpg4win.org/thanks-for-download.html
打开控制台,执行gpg –gen-key,按提示输入你的名字和邮箱,可以随意,作为作者信息保存。
之后看到提示 You selected this USER-ID:
xxx <xxx@xxx.xxx>,如果要修改则输入N或E,确定信息输入O。
确认好你的信息,下一步会弹出一个窗口,输入两次密码作为秘钥的密码。
看到下面的提示说明秘钥已经生成了
gpg: revocation certificate stored as '
xxx.rev'
public and secret key created and signed.
revocation的路径是撤销秘钥的证书,如果你不再需要这个秘钥则可以撤销。
执行gpg --list-keys
查看生成过的所有秘钥。
pub ed25519 2023-08-05 [SC] [expires: 2026-08-04]
0A28B86FA6FEFCAABD8F0C2199640244XXXXXXXX
uid [ultimate] 名称 邮箱
sub cv25519 2023-08-05 [E] [expires: 2026-08-04]
观察一下发现keyId的后八位我已经标记成了X,这八位先记下,一会需要用到。
然后执行gpg --keyserver keyserver.ubuntu.com --send-keys 秘钥8位尾ID
将秘钥上传到服务器
接下来执行gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 秘钥8位尾ID
获取秘钥信息
这里–keyserver后面的参数也可以改成其他相关服务器地址,因为有些可能已经失效。
然后执行gpg --export-secret-key 秘钥8位尾ID
导出秘钥文件
2.配置上传
首先引入一下插件
apply plugin: 'maven-publish' apply plugin: 'signing'
然后编写一下gradle文件
jar { enabled = true } task sourcesJar(type: Jar) { from sourceSets.main.allSource archiveClassifier.set('sources') duplicatesStrategy 'exclude' } task javaDocJar(type: Jar) { from javadoc archiveClassifier.set('javadoc') } javadoc { options.encoding = "UTF-8" failOnError = false }
这里有sourcesJar和javaDocJar两种打包,是因为项目文件上传到Maven仓库后会经过自动检查,通过检查才能正式传入公开的主Maven仓库。
而这里的检查则要求必须有一份源码一份JavaDoc。
那么接下来我们来配置一下”发布到Maven”的相关配置。
publishing { publications { mavenJar(MavenPublication) { artifact sourcesJar artifact javaDocJar groupId '包名' artifactId '项目名' version '版本号' from components.java pom { name = "仓库名称" description = "仓库描述" url = "项目URL" // 在这里配置你的开源许可 licenses { license { name = 'The Apache License, Version 2.0' url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } developers { developer { name = "开发者名称" email = "开发者邮箱" } } scm { url = "仓库地址" connection = 'scm:git:' + "仓库地址" + '.git' developerConnection = 'scm:git:' + "仓库地址" + '.git' } } } } signing { sign publishing.publications.mavenJar } repositories { maven { name "Maven仓库名称 可随意" // url "https://s01.oss.sonatype.org/content/repositories/snapshots/" // url "https://oss.sonatype.org/service/local/staging/deploy/maven2" url "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" credentials { username = "SonaType账号" password = "SonaType密码" } } } }
稍微解释一下各参数的作用吧
groupId 填写你的包名或其他的标识,在Maven仓库显示为Organization
artifactId 填写项目的名字,在Maven仓库直接显示为名字。
例如 groupId 为 com.example.test,artifactId 为 class01,那么在maven仓库就是 pkg:maven/com.example.test/class01@1.0.0
紧接着在pom下面的url,可以填写你项目的地址,而pom下scm内的url,可以填写你项目源代码的地址(如Github)
介绍完参数,现在需要完成最后一步,签名。
直接在gradle.properties中添加这三行
signing.keyId= signing.password= signing.secretKeyRingFile=
一定要注意大小写,然后正确的填入参数即可,keyId和password是刚才生成的秘钥的8位尾ID和秘钥秘钥,secretKeyRingFile填写秘钥的文件的绝对地址。
这样基本的配置就完成了,引入插件后,来到gradle的tasks中,发现有一个publishing,只需要运行publicAllpublicationsTo***Repository即可。
3.发布到Maven仓库
https://s01.oss.sonatype.org/#stagingRepositories
打开上面的链接,用你的Snoatype账号登录。
选中你刚才上传的仓库,点击上面的Close,如果通过了检查,则可以继续单击Release来正式发布到主仓库,一般需要1-4个小时来更新。