作为持续搬砖的老鸟,不开源写点东西,在未来的求职路上,真的是占优势啊。我之前写过一些开源库,上传到bintray上面的,奈何现在访问不了,只能想办法迁移到maven central。
在迁移到maven central的过程中,踩过了无数坑,分享给大家,希望大家少走弯路,写得不对的地方,欢迎大家批评指正。
上传方式选择
我采用的是上传zip包到maven central的方式。看了一下官方文档,支持多种方式上传到maven central。
官方文档
温馨提示:官方文档全是英文的,看起来超累,不过我在上传的过程中,所有遇到的问题,其实在文档中都能找到答案。
详细步骤说明
第一步:注册账号与命名空间
在如下的网站Maven Central注册一个账号,并申请一个命令空间(namespace),需要等到namespace验证通过,就可以上传库到maven central了。
第二步:上传zip包示例
给大家展示一下上传zip包的页面:

从这个截图可以看到,我已经上传成了一个库netannotation库。具体上传的时候,需要填写deployment name, description,以及上传一个zip包。这个zip包一定要符合他们的各种条条款款才能上传成功的。
第三步:必须包含的JAR文件
当时遇到的第一个坑就是这个zip包里面必须包含source.jar
和javadoc.jar
文件,如果没有这两个文件,上传到maven的时候,是审核不通过的。

解决方案:在build.gradle文件下面配置:
groovy
// 生成源码 JAR
task sourcesJar(type: Jar) {
from sourceSets.main.allJava
archiveClassifier = "sources"
}
// 生成 JavaDoc JAR
task javadocJar(type: Jar, dependsOn: javadoc) {
from javadoc.destinationDir
archiveClassifier = "javadoc"
}
第四步:完整build.gradle配置
build.gradle文件里面配置的信息比较多,一个都不能少,按照文档来配置肯定不会错:
ini
groovy
复制
apply plugin: 'maven-publish'
publishing {
publications {
release(MavenPublication) {
groupId = 'io.github.richzjc'
artifactId = 'netannotation'
version = '1.0.0'
afterEvaluate {
artifact("$buildDir/libs/${project.name}.jar")
}
artifact sourcesJar
artifact javadocJar
pom {
name = "netannotation"
description = "运用编译时注解生成代码,所用到的注解"
url = "[email protected]:richzjc/NetworkListener.git"
developers {
developer {
id = "richzjc"
name = "richzjc"
email = "[email protected]"
}
}
licenses {
license {
name = "The Apache License, Version 2.0"
url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
}
}
scm {
connection = "scm:git:[email protected]:richzjc/NetworkListener.git"
developerConnection = "scm:git:ssh://github.com:richzjc/NetworkListener.git"
url = "https://github.com/richzjc/NetworkListener.git"
}
}
}
}
repositories {
maven { url "file://${rootDir}/repo" }
}
}
第五步:执行发布命令
执行命令:
./gradlew :netannotation:publish --quiet
(将netannotation改成你自己的模块名称)

第六步:GPG签名配置
-
细心的朋友肯定能发现,这个文件目录下面没有.asc文件,这是因为上传到maven central的文件需要通过gpg进行签名。因此得在电脑上首先安装gpg命令,没有安装的朋友,网上资料很多,首先安装gpg命令。安装了gpg命令后在终端生成密钥,执行如下命令
gpg --gen-key
按照提示操作,一步一步输入信息,就可以生成密钥了。

---send-keys后面的密钥id, 可以通过 gpg --list-keys
查看相应的密钥id
第七步:公钥和私钥有了, 接下来就是要通过gpg对repo文件进行签名了。我写了一个shell脚本,分享给大家:
bash
bash
复制
#!/bin/bash
if [ $# -ne 1 ] || [ ! -d "$1" ]; then
echo "Usage: $0 <directory_path>"
exit 1
fi
find "$1" -type f -print0 | while IFS= read -r -d '' file; do
echo "Verifying: $file"
gpg -ab "${file}"
done
执行这个脚本的时候,需要传repo的路径。 如sh gpg.sh ./repo
将上面的shell脚本保存到了gpg.sh目录下面。 执行了这个命令就 可以看到后缀为.asc的文件了。
第八步:metadata文件陷阱。到这里,离成功上传到maven越来越近了。但是在这一步我又遇到了一个坑。先看一下截图:

重要提醒:必须删除metadata相关文件,否则审核不通过!
第九步:前期工作都已经做完了, 最后一步就是压缩成zip包上传到maven central , 在这里我又遇到了一个坑,上传的zip包路径必须要与申请的namespace匹配上, 匹配不到也是审核不成功的, 针对我注册的namespace, 我需要将io目录压缩成zip包上传到maven central, 多了一级目录,少了一级目录都是不行的。如果上传后有问题,就根据上传页面给到的信息,相应修改即可。

必须将
io
目录压缩成zip包,路径层级与namespace严格对应
最后寄语
祝你好运!遇到了问题可以留言一起讨论!!!!!