SDK发布到maven Central,实现远程依赖

最近大学同学约了一顿饭,主题是”结束北漂“,这哥们是我们的生活委员,平时非常热心,也非常nice,我就给他起了一个外号,名叫”主席“,最近主席突然说要离开北京了,请在北京的同学吃java环境变量配置饭,我们一行几个人相聚到了北京”东兴楼“。

主席说”来北京5app小胖子年了,当时来北京的时候就定下了这个目标,在北京奋斗5年,现在5年javaee零一个月,要结束北漂生活,回老家了,如果考研顺利,就上研究生,如果不顺利就继续在上海当程序员,至少离家近一点。“

确实很快,一转眼都5年了,我们扯了扯大学的日常,工作的java语言烦心事,以及对ubuntu安装主席日后的祝福,就这样简单一顿饭,给主席壮了行。

最近很忙,一直也没来的级更文,年后组织结构变化,我也换了领导,一切都从新开始,从头出发…

我们最近apple在做一个三方ubuntu命令SDK,其实在Android开发中,SDK开发基本属于ubuntu安装教程日常,只是SDK的用途和集成方式有差异。

我之前最早主要要系统级SDjavascriptK,简单来说就是把SDK集成到手机系统模java面试题块里。

这种情况一般都是将SDK打包直接邮件给手机厂商,比如华gradle/米/O/V,然后手机厂商根据附件的SDK进行本地依赖ubuntu换源

最近公司要做一个三方SDK,ubuntu20.04安装教程业务方是市场上各个应用媒体,接入环境复杂,接入方众多。

一般三APP方SDubuntu怎么设置中文K开发都会尽量保证以下几个原则

  • 1.降低耦合,尽量少引用或者不引用其他三方包。
  • 2.包体积,尽量小,能动态化的java语言尽量动态化(当然你的动态化需要跟三方说明,不能随便上功能)
  • 3.稳定性,无论出现什么问题,appreciate一定不能崩溃,你的崩溃会影响主站App的崩溃。
  • 4.性ubuntu命令能,内存占用/功耗尽可能小,这个其实是和业务量强相关的。
  • 5.便捷java培训性,SDK接口的设计,尽可能简介,易用,减少不必要的参数,和方法。
  • 6.兼容性,这一点需要注意,如果SDK迭代的频java面试题率很高,这一点是保证接入友好的先决条件。

开始我们通过FAT-AAR将集团所有的内部库直接打进了SDK,appear放到了开发平台,每个ubuntu和linux的区别三方App通过平台注册,申请appkey,然后下载SDK进行本地依赖。

但是后来对接过程中发现,三方app有的已经接入了集团的其他SDK,比如支付宝SDK,阿里云SDK,这些SDK中也用到了相同的二方库,这时就会产生类冲突,又因为是FAT-appointmentAAR合并打包,所以没办法exclude,这时application答疑变成了一个非常消耗精力的过程。

在这个gradle背景下,解决这个问题的思路主要有以下几点。

  • 1.拆分打包,把SDK分开产出,让需求方逐个下载并依赖(如有冲突就选择性依赖)
  • 2.把集团包源码拉取到自己项目,统一把前缀包名修改,从根源解决类冲突。
  • 3.将我们的SDK放到maven中心仓库,通过implementation进行远程Ubuntu依赖,连带依赖打进poapp小胖子m.xml,三方一键式引用,一键式exclude。

经过再三斟酌,以及接入体验。最终决定采用第3个方案,第3个方案需要上ubuntu和linux的区别传到maven中心仓库,这个过程之前没有接触过,参考了各个大佬的博客,都没能一站式解决问题,还是有各种坑,最终一路趟坑总结了这篇maven中ubuntu是什么操作系统心仓库的发布过程。

maven中心仓库发布分为以下几大步骤。

  • 1.Sonatype注册账号,创建项目提工单,做https协议域名配置。
  • 2.gpg安装,配置apple,秘钥生成,秘钥上传。
  • 3.完成本地ubuntu安装上传脚本,开始上传。

Sonatype注册

首先需要去Sonatype注册一个账号,就像这样

SDK发布到maven Central,实现远程依赖

SDK发布到maven Central,实现远程依赖

SDK发布到maven Central,实现远程依赖

SDK发布到maven Central,实现远程依赖

创建完项目,相关的工作人员会让你做一个添加DNS TXT的工作。

SDK发布到maven Central,实现远程依赖

意思是你需要有一个groupid的域名,然后让你在域名下添加一条记录,记录内容为你当前创建的项目单编号。

比如:添加[OSSRH-78888],主要是为了证明你是这个groupid的所有者,防止恶意注册,具体添加DNS TXT的方法可以参考下这个:central.sonatype.org/faq/how-to-…

DNS TXT可以在创建完项目单就去添加approach,因为maven仓的工作人员跟我们有时差,他们一般是晚上,半夜回复你的项目单,这样你第二天看到跟他再交流,他又得等到半夜再java语言回复你HTTPS,比较耗时间。

java怎么读建成功后大概是这样一个页面

SDK发布到maven Central,实现远程依赖


安装gpg

mac环gradle下载境 好多人会让你通过brew命令去安装,比如brew install gpg,但是我是安装不上的,因为我的mac系统是12.3,比较新,gpg不支持了,会报如下错误

SDK发布到maven Central,实现远程依赖
我们可以去这里下载gnupg.org/ftubuntu安装教程p/gcrypt/…ubuntu怎么读

如果不想选这些版本可以无脑点这个链接下载:gnupg.org/ftp/gcrjava环境变量配置ypt/…,这个直接是下载2.3.4的版本

SDK发布到maven Central,实现远程依赖

windows 可以去这里下载:www.gpg4win.org/get-gpg4win…

下完后,安装,然后需要配置下环境变量

export GPG_HOME=/usr/local/gnupg-2.3/bin

export PATH=${PATH}:${GPG_HOME}

  • 1.产生秘钥key
  • 2.输入passphrase
  • 3.查看秘钥
  • 4.上传秘钥
  • 5.查看秘钥是否长传成功
  • 6.删除秘钥(这个主要是因为我ubuntu安装开始摸索生成一堆没有gradle下载用的秘钥)
  • 7.到处秘钥

1.生成秘钥

gpg –gen-key

SDK发布到maven Central,实现远程依赖

2.输入name email这些基础信任,然后java编译器输入o会java面试题弹窗让设置密码,这个密码非常重要,目前我还不知道密码忘记怎么办,所以到这一步的时候,一定记一下这个秘钥

圈起来的都是输入信息

SDK发布到maven Central,实现远程依赖
SDK发布到maven Central,实现远程依赖

3.查看秘钥

gpg –list-kgradle是什么eys(主要用于查看当前秘钥是不是生成成功了)

SDK发布到maven Central,实现远程依赖

4.上传秘钥

gpappleg --keyserver happreciatekp://keyserver.ubuappearancentu.com:11371 —send-keys 4624BE8EC49928575D81F9D5C68ED8702A95ED25 这一步主要是把当前的秘钥发布到服务器,使得maven中心仓能验证到你的身份。

ubuntu安装里好多人都失败。

第一是这个服务不是很稳定。

第二是你的翻墙不太gradle和maven的区别稳定。

appear以往三个服务器里上传,只要成功一个就可java培训以。

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 4624BE8EC49928575D81F9D5C68ED8702A95ED25
gpg --keyserver hkp://keys.openpgp.org:11371 --send-keys 4624BE8EC49928575D81F9D5C68ED8702A95ED25
gpg --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys 4624BE8EC49928575D81F9D5C68ED8702A95ED25

5.查看秘钥是否上传成功 gpg --keyservjava培训er hkp://keyserver.ubuntu.com:11371 --rjava培训ecv-keys 4624BE8EC49928575D81F9D5C68ED8702A95ED25

如果一直返回No keyserver available就是没有成功。 由于上传服务器不同,所以查询也需要多个服务器查询

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 4624BE8EC49928575D81F9D5C68ED8702A95ED25
gpg --keyserver hkp://keys.openpgp.org:11371 --recv-keys 4624BE8EC49928575D81F9D5C68ED8702A95ED25
gpg --keyserver hkp://pool.sks-keyservers.net:11371 --recv-keys 4624BE8EC49928575D81F9D5C68ED8702A95ED25

6.删除秘钥

删除秘钥需要2步骤,第1需要先删除私钥,第2步再删除approach公钥。

gpg --delete-secret-keys 4624BE8EC49928575D81F9gradle是什么D5C68ED8702A95ED25

SDK发布到maven Central,实现远程依赖

gpg --delete-keys 462appreciate4BE8EC49928575D81F9D5C68ED8702A95ED25

SDK发布到maven Central,实现远程依赖

中途需要输入创appearance建秘钥时候的密码。

SDK发布到maven Central,实现远程依赖

7.导ubuntu换源出私钥https协议 gpg –export-secretapple-keys -o my.gpg 这个可以ubuntu安装放在自己的主工程根目录。ubuntu怎么设置中文

3.编写打包上传脚本

3.1 在根目录gradle.properties添加配置
#这是我们sdk的groupId,主要用于三方远程依赖使用。
groupId=你的groupId
#是否仅发布到Snapshots,如果为false则发布正式版本
publish2Snapshots=false
#MavenCentral发布
releaseUrl=https://s01.oss.sonatype.org/content/repositories/releases/
snapshotsUrl=https://s01.oss.sonatype.org/content/repositories/snapshots/
#这个不要动,这是工程的pgp私钥配置和私钥密码、sign keyId & password
signing.keyId= 你的私钥id(就是你私钥的后8位)
signing.password=你私钥的密码(就是不让你忘记的那一个)
#sign my.gpg可放在工程根目录,私钥文件,不要动!!!
signing.secretKeyRingFile=../my.gpg
#account,这个是maven仓库的用户名和密码
ossrhUsername=你第一步maven仓库的账号
ossrhPassword=你第一步maven仓库的密码
##这个没什么大用,主要用于pom.xml文件的个别标签描述code url
sdkUrl= 这里填你的官网就行
sdkGitUrl= 如果你们sdk是开源的,可以填开源的git地址,没开源就填你们官网
3.2 完成编译上传脚本upload.gradle,放到主工程根目录。

//本脚本主要用于上传包到maven仓库
//1.依赖主工程的gradle.properties配置
//2.依赖java类的常量来写入当前的sdk版本;
apply plugin: 'maven-publish'
apply plugin: 'signing'
group = groupId
//读取java类的常量版本号字符串
def buildConfigFile = file('../Testc/main/java/com/test/C.java')
buildConfigFile.eachLine {
    def matcher = (it =~ /(?:.*SdkVersion = ")(.*)(?:".*)/)
    if (matcher.matches()) {
        if (Boolean.valueOf(publish2Snapshots)) {
            version = matcher[0][1] + "-SNAPSHOT"
        } else {
            version = matcher[0][1]
        }
        println("当前版本号为.......>>>>>>" + "$version")
        return
    }
}
//以下这些包需要添加到pom.xml文件中
def implementationJar = ["glide", "fastjson", "okhttp", "okio"] as String[]
publishing {
    publications {
        mavenCentralUpload(MavenPublication) {
            artifact "$libTargetFile"
            artifactId = "$libName"
            pom {
                name = libName
                description = libDescription
                url = sdkUrl
                licenses {
                    license {
                        name = "The Apache License, Version 2.0"
                        url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
                    }
                }
                developers {
                    developer {
                        id = "这里写你的项目id"
                        name = "SDK名称"
                        email = "项目邮箱"
                    }
                }
                scm {
                    connection = sdkGitUrl
                    developerConnection = sdkGitUrl
                    url = sdkUrl
                }
                withXml {
                    def dependenciesNode = asNode().appendNode("dependencies")
                    configurations.implementation.allDependencies.forEach() { dependency ->
                         if (implementationJar.contains(dependency.name)) {
                                //只将我们定义到implementationJar数组的包打进pom
                                println("now build pom dependency.name :" + dependency.name)
                                if (dependency.version != "unspecified" && dependency.name != "unspecified") {
                                    def dependencyNode = dependenciesNode.appendNode('dependency')
                                    dependencyNode.appendNode('groupId', dependency.group)
                                    dependencyNode.appendNode('artifactId', dependency.name)
                                    dependencyNode.appendNode('version', dependency.version)
                                }
                            }
                    }
                }
            }
        }
    }
    repositories {
        maven {
            def targetUrl
            if (Boolean.valueOf(publish2Snapshots)) {
                targetUrl = snapshotsUrl
            } else {
                targetUrl = releaseUrl
            }
            url = targetUrl
            credentials {
                username = ossrhUsername
                password = ossrhPassword
            }
        }
    }
}
signing {
    sign publishing.publications.mavenCentralUpload
}
3.3 最后在需要打包的module/build.gradle中增加以下配置
apply from: '../upload.gradle'
project.afterEvaluate {
    publish.dependsOn assembleRelease
}
3.4执行编译上传命令
./gradlew :你的moudle:publish

新上传你的sdk,可以去中心仓库搜索查看 s01.oss.sonatype.org/#welcjava面试题ome 这里需要注意新老仓库的地址

SDK发布到maven Central,实现远程依赖
这里有说明2021年2月以后的全都是新地址s01.oss.sonatype.org/之前的可以在老地址使用oss.sonatype.org/.

SDK发布到maven Central,实现远程依赖
但是项目依赖需要等待一会才能远程依赖到,因为仓库是海外的地址下载比较慢,为了效率可以在工程的build.gradle中增加以下镜像

maven { url 'https://maven.aliyun.com/repository/public' }

发表评论

提供最优质的资源集合

立即查看 了解详情