首页>>互联网>>大数据->发布组件到 Maven 私服、公服

发布组件到 Maven 私服、公服

时间:2023-11-29 本站 点击:1

前言

欢迎任何形式的转载,转载请保留原文链接:https://juejin.cn/post/7091670447422439432/

文章主要内容:讲述如何发布组件到 Maven 私服、Maven Central

目录

发布组件到 Maven 私服

发布组件到 Maven Central

发布组件到 Maven 私服

创建 maven_private.gradle,内容如下

// maven 插件apply plugin: 'maven'// 打包的资源内容,关于 javaDoc 部分,至今未找到能用的task androidSourcesJar(type: Jar) {    classifier = 'sources'    from android.sourceSets.main.java.srcDirs}artifacts {    archives androidSourcesJar}// maven 打包并上传,发布到 maven-releasesuploadArchives {    repositories.mavenDeployer {        // Nexus 服务器地址与登录信息        repository(url: "${maven_domain}/repository/maven-releases/") {            authentication(userName: maven_release_user, password: maven_release_password)        }        // pom.xml 标签含义参考:http://www.javashuo.com/article/p-zlitehoa-eg.html        pom.project {            groupId ''            artifactId ''            version ''            description ''        }        doLast {            println "【${project.name}】项目,【${repository.authentication.userName}】用户," +                    "成功往【${repository.url}】发布版本:${pom.groupId}:${pom.artifactId}:${pom.version}"        }    }}// maven 打包并上传,发布到 maven-devtask uploadDevArchives(group: 'upload') {    def firstTask = rootProject.startTasks[0]    if (firstTask != null && firstTask.endsWith('uploadDevArchives')) {        uploadArchives {            repositories.mavenDeployer {                repository(url: "${maven_domain}/repository/maven-dev/") {                    authentication(userName: maven_user, password: maven_password)                }            }        }        uploadDevArchives.dependsOn uploadArchives    }}

项目 gradle.properties,添加以下内容

maven_domain            = http://127.0.0.1:8081maven_release_user      = adminmaven_release_password  = adminmaven_user              = adminmaven_password          = admin

项目目录/build.gradle,添加以下内容

android {    defaultConfig {        versionCode 1        versionName "1.0.0"    }}// maven 发布,必须在 android.defaultConfig.versionName 配置之后,以便获取版本名称apply from: "${rootDir.path}/gradle/maven_private.gradle"uploadArchives {    repositories.mavenDeployer {        pom.project {            groupId 'io.github.jefshi'            artifactId 'lib-log'            version android.defaultConfig.versionName            description '日志打印工具'        }    }}

同步项目后,Gradle Tasks 就会生成 uploadArchive 任务,执行 uploadArchives,出现以下结果表示上传成功

Task :xxx:uploadArchives【xxx】项目,【xxx】用户,成功往【http://127.0.0.1:8081/repository/maven-releases/】发布版本:io.github.jefshi:lib-log:1.0.0BUILD SUCCESSFUL in 1s23 actionable tasks: 2 executed, 21 up-to-date21:21:57: Task execution finished 'uploadArchives'.

上述添加了一个自定义任务 uploadDevArchives,可以直接上传到 maven-dev 仓库,其他 maven-xxx 仓库以此类推

组件发布成功后,通过 implementation 'io.github.jefshi:lib-log:1.0.0@aar' 下载使用

发布组件到 Maven Central

简要步骤

官方发布指南,简化如下:https://central.sonatype.org/publish/publish-guide/

注册 Sonatype 的账户。地址:https://issues.sonatype.org/secure/Signup!default.jspa

提交发布申请。创建 Issue 地址:https://issues.sonatype.org/secure/CreateIssue.jspa

生成 GPG 密钥对,并发布到 GPG 密钥服务器

Gradle 方式上传组件到 OSS 仓库

登录 OSS maven 服务器 release 组件

通知 Sonatype 的工作人员激活组件,并关闭 Issue

回复参考:Thanks, I release my repository successful. Could you activate my sync process?

使用组件,见第 4 步上传组件章节说明。如果要检索的话,则得等 1-2 天

中央仓库搜索网站:http://search.maven.org/

其他说明:

Sonatype 工作人员是北京时间 22:00 之后上班的,所以在这之前就不用等了,再这之后倒响应挺快的

提交发布申请

Project:Community Support - Open Source Project Repository Hosting

Issue Type:New Project

点击下一步后,具体的填写可以参考:https://issues.sonatype.org/browse/OSSRH-80313

Summary:lib-log

Group Id:io.github.jefshi,这个必须是可访问域名倒写

Already Synced to Central:No

生成 GPG 密钥对,并发布到 GPG 密钥服务器

因为 Maven Central 要求文件进行 GPG/PGP 签名,所以要生成 GPG 密钥对

Sonatype 官网要求说明:https://central.sonatype.org/publish/requirements/#sign-files-with-gpgpgp

Sonatype 官网 GPG 指南:https://central.sonatype.org/publish/requirements/gpg/

Window 使用 Cygwin 安装 gnupg 即可取得 gpg 命令

上述官网中需要用到的命令汇总

# 检查安装成功没gpg --version# 生成密钥对gpg --gen-key# 查看公钥gpg --list-keys# 将公钥发布到 GPG 密钥服务器gpg --keyserver keyserver.ubuntu.com --send-keys 公钥ID# 查询公钥是否发布成功gpg --keyserver keyserver.ubuntu.com --recv-keys 公钥ID# 将公钥从 GPG 密钥服务器上移除gpg --keyserver keyserver.ubuntu.com --delete-secret-keys 公钥IDgpg --keyserver keyserver.ubuntu.com --delete-keys 公钥ID

生成密钥对:gpg --gen-key

密钥匹配:一路回车取默认值,最后确认即可

要求输入姓名、邮箱,然后确认

还需要输入一个 Passphase,相当于一个密钥库的密码,一定不要忘了,也不要告诉别人,最好记下来,因为后面会用到

查看公钥:gpg --list-keys

下述命令输出信息里【82DC852E】就是公钥ID。【hy_think hy_think@163.com】则是 USER-ID

$ gpg --list-keysC:/Users/huangyong/AppData/Roaming/gnupg/pubring.gpg----------------------------------------------------pub   2048R/82DC852E 2014-04-24uid                  hy_think <hy_think@163.com>sub   2048R/3ACA39AF 2014-04-24

GPG 密钥服务器还可以用以下

keyserver.ubuntu.com

keys.openpgp.org

pgp.mit.edu

Gradle 方式上传组件到 OSS 仓库

Sonatype 官网说明:https://central.sonatype.org/publish/publish-gradle/

OSS 仓库地址(来源于上述官网):https://s01.oss.sonatype.org

OSS 仓库账户密码:即 Sonatype 的账户密码

因为官方插件关于 GPG 密钥信息要么写在项目的gradle.properties,要么写在~/.gradle/gradle.properties(Gradle 缓存),明显后者安全性高,如果后者不存在的话手动新建即可

# GPG 配置信息signing.keyId = 公钥IDsigning.password = GPG 密码signing.secretKeyRingFile = ~/.gnupg/secring.gpg# OSS 仓库账户密码ossrhUsername = OSS 账户,这个倒可以写在 local.propertiesossrhPassword = OSS 密码,同上

创建 maven_central.gradle,内容如下

// maven 插件apply plugin: 'maven'apply plugin: 'signing'// 打包的资源内容,关于 javaDoc 部分,至今未找到能用的task androidSourcesJar(type: Jar) {    archiveClassifier.set("sources")    from android.sourceSets.main.java.srcDirs}artifacts {    archives androidSourcesJar}// GPG 密钥签名,配置信息放【~/.gradle/gradle.properties】signing {    sign configurations.archives}// maven 打包并上传uploadArchives {    repositories.mavenDeployer {        beforeDeployment {            MavenDeployment deployment -> signing.signPom(deployment)        }        repository(url: "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") {            authentication(userName: ossrhUsername, password: ossrhPassword)        }        snapshotRepository(url: "https://s01.oss.sonatype.org/content/repositories/snapshots/") {            authentication(userName: ossrhUsername, password: ossrhPassword)        }        // pom.xml 标签含义参考:http://www.javashuo.com/article/p-zlitehoa-eg.html        pom.project {            name POM_NAME            groupId POM_GROUP_ID            artifactId POM_ARTIFACT_ID            version POM_VERSION_NAME            packaging POM_PACKAGING            description POM_DESCRIPTION            url POM_URL            // 配置代码库,为 Maven 站点和其它插件使用            scm {                url POM_SCM_URL                developerConnection POM_SCM_DEV_CONNECTION                connection POM_SCM_CONNECTION            }            // 证书            licenses {                license {                    name POM_LICENCE_NAME                    url POM_LICENCE_URL                    distribution POM_LICENCE_DISTRIBUTION                }            }            // 开发者信息            developers {                developer {                    id POM_DEVELOPER_ID                    name POM_DEVELOPER_NAME                    email POM_DEVELOPER_EMAIL                }            }        }        doLast {            println "【${project.name}】项目,【${repository.authentication.userName}】用户," +                    "成功往【${repository.url}】发布版本:${pom.groupId}:${pom.artifactId}:${pom.version}"        }    }}

项目 gradle.properties,添加以下内容

关于 pom.xml 标签含义参考:http://www.javashuo.com/article/p-zlitehoa-eg.html

关于 groupId:必须以 Issue 中申请的 group_id 开头,后面可以加其他内容,同时 Gradle 会按该值创建缓存目录

# maven_central 相关POM_NAME                 = lib-logPOM_GROUP_ID             = io.github.jefshi,必须以 Issue 中申请的 group_id 开头,Gradle 会按该值创建缓存目录POM_ARTIFACT_ID          = lib-logPOM_PACKAGING            = aarPOM_VERSION_NAME         = 1.0.0POM_DESCRIPTION          = 日志打印工具POM_URL                  = https://github.com/jefshi/lib-logPOM_SCM_URL              = https://github.com/jefshi/lib-logPOM_SCM_CONNECTION       = scm:git@github.com:jefshi/lib-log.gitPOM_SCM_DEV_CONNECTION   = scm:git@github.com:jefshi/lib-log.gitPOM_LICENCE_NAME         = The Apache License, Version 2.0POM_LICENCE_URL          = http://www.apache.org/licenses/LICENSE-2.0.txtPOM_LICENCE_DISTRIBUTION = repoPOM_DEVELOPER_ID         = jefshiPOM_DEVELOPER_NAME       = jefshiPOM_DEVELOPER_EMAIL      = -

项目目录/build.gradle,添加以下内容

apply from: "${rootDir.path}/gradle/maven_central.gradle"

同步下项目,Gradle Tasks 就会生成 uploadArchive 任务,执行 uploadArchives,出现以下结果表示上传组件成功

maven_domain            = http://127.0.0.1:8081maven_release_user      = adminmaven_release_password  = adminmaven_user              = adminmaven_password          = admin0

上述配置组件发布并激活成功后,通过implementation 'io.github.jefshi:lib-log:1.0.0'下载使用

登录 OSS maven 服务器发布组件

Sonatype 官网指南:https://central.sonatype.org/publish/release/

OSS 仓库地址(来源于上述官网):https://s01.oss.sonatype.org

OSS 仓库账户密码:即 Sonatype 的账户密码

发布说明

登录 OSS 仓库,在左边菜单找到【Staging Repositories】,选中上传的组件

可以发现这时你的构件状态是“open”,勾选你的构件,查看校验的结果信息,如果没有错误就可以点击刚才勾选的checkbox上面右边一点的“close”按钮,在弹出框中“confirm”,这里又需要校验一次,稍后结果会通过邮箱通知。

等成功后(系统自动进行,很快的),再次登录系统找到你的构件,这是状态已经是“closed”的了,再次勾选,然后点击“close”旁边的“release”,在弹出框中进行“confirm”,稍后结果会通过邮件进行通知。

参考文献

将项目发布到 Maven 中央仓库踩过的坑:https://brianway.github.io/2017/05/17/release-to-maven-central-repo/

将 Smart 构件发布到 Maven 中央仓库:https://my.oschina.net/huangyong/blog/226738

发布Maven构件到中央仓库:https://my.oschina.net/songxinqiang/blog/313226

使用Gradle发布开源项目到Maven Central:https://developer.51cto.com/article/464379.html

版本同步

博客同步版本:

2022-04-28:首发博客

原文:https://juejin.cn/post/7091670447422439432


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/BigData/1250.html