有时候想要让自己的项目也能快速地分享给别人使用,每次都打包成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个小时来更新。