SonaType Maven for Android 使用教程

SonaType Maven for Android 使用教程

说明

本文将展示如何将AAR上传到mavenCentral中央仓库并使用
Maven仓库推送版本分为ReleaseSnapShot两个版本

版本说明
Release推送后不可再次重复推送相同的版本
SnapShot快照版本,可相同版本重复推送,在版本开发中用于bug修复

教程

以下将以SonaType运营的mavenCentral()仓库为示例进行教程说明,教程主要分为以下几个步骤:

  1. 注册SonaType账号
  2. 创建Group ID
  3. 下载安装gunpg
  4. 创建生成秘钥
  5. 配置maven-publish打包推送aar
  6. 发布到mavencentral中央仓库
  7. 从mavencentral中央仓库使用发布的aar

1. 注册SonaType账号

打开注册地址,如图填写信息

2. 创建Group ID

注册登录后,在顶部点击**新建**创建问题,并按图填写相关信息

请注意谨慎填写Group ID,这将影响到添加依赖时使用的名称,其他请按照示例进行填写

在Github创建完存储库后, 需要点击**【备注】对工单使用英文**进行回复,如下示例, 再过几分钟后工单状态变为【已解决】,则已完成

Hello, the repository has been created.
please check, thanks

3.下载gunpg

由于maven-publish发布时需要签名,需要下载安装gnupg,以下将以macOS 系统进行示例

打开下载地址,点击Mac GPG进行下载

安装完成后在控制台输入gpg --version,即可查看版本号

4. 创建秘钥

打开安装的GPG Keychain软件,点击顶部【文件】->【新公钥】在弹窗中填入相关信息

创建完成后会提示发布证书,按照提示上传即可

通过以下命令导出秘钥,路径部分请修改为需要导出的地址,在弹出的弹窗中,输入创建key填入的密码

gpg --export-secret-keys -o /Users/你的设备名称/work/secring.gpg

复制导出的秘钥到工程根目录

复制创建的秘钥最后8位,打开项目local.properties文件,将一下内容复制进去并填写对应信息

# 密钥ID的后8位
signing.keyId=xxxxxxxx
# 步骤4中 创建密钥时填写的密码
signing.password=xxxxxx
# 步骤4中 备份私钥保存的文件路径
signing.secretKeyRingFile=..\\secring.gpg
# 步骤1中 注册sonatype的用户名与密码
ossrhUsername=xxx
ossrhPassword=xxx

5. 配置上传脚本

在工厂根目录创建mavencenteral.gradle文件,并复制以下信息即可, 在对应需要修改的地方修改代码

apply plugin: 'maven-publish'
apply plugin: 'signing'

def PUBLISH_VERSION = '1.0.2-SNAPSHOT'		// 版本号,后缀添加SNAPSHOT则为快照版本
def PUBLISH_GROUP_ID = 'com.test'				// 组名, 需要与sonatype上申请的一致,否则无法传入
def PUBLISH_ARTIFACT_ID = 'ad-core'				// 工件名称
//以上内容会决定添加依赖时的名称, 以上则为:implementation 'com.test:ad-core:1.0.2-SNAPSHOT'

//以下内容无需修改,会从local.properties中读取
ext["signing.keyId"] = '' //签名的密钥后8位
ext["signing.password"] = ''  //签名设置的密码
ext["signing.secretKeyRingFile"] = '' //生成的secring.gpg文件目录
ext["ossrhUsername"] = ''  //sonatype用户名
ext["ossrhPassword"] = ''  //sonatype密码

//打包源码到项目中中
task sourceJar(type: Jar) {
  from android.sourceSets.main.java.srcDirs
  classifier "source"
}
//读取配置的账号、秘钥等信息
File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
  println "Found secret props file, loading props"
  Properties p = new Properties()
  p.load(new FileInputStream(secretPropsFile))
  p.each { name, value ->
    ext[name] = value
  }
} else {
  println "No props file, loading env vars"
}

afterEvaluate {
  publishing {
    publications {
      release(MavenPublication) {
        groupId PUBLISH_GROUP_ID					
        artifactId PUBLISH_ARTIFACT_ID
        version = PUBLISH_VERSION
        //填写你的aar名称
        artifact("$buildDir/outputs/aar/xxx.aar")
        pom {
          name = PUBLISH_ARTIFACT_ID				//填写工件名称一致即可
          url = ''		//一般填git地址,也可以不填
          developers {
            developer {
              id = 'id'
              name = '你的sonatype用户名'
              email = '' //你的sonatype注册邮箱
            }
          }
          licenses {
            license {
              name = '许可证名称'
              url = '许可证网页链接' //可以放到github上
            }
          }
          scm {
            connection = ''//项目在github链接
            developerConnection = ''//github链接
            url = '' //github项目对应的分支链接
          }
          withXml{
            //解决上传版本号显示 unspecified 问题
            def dependenciesNode = asNode().appendNode('dependencies')
            configurations.implementation.allDependencies.each {
              if(it.group != null && (it.name != null || "unspecified".equals(it.name)) && it.version != null)
              {
                def dependencyNode = dependenciesNode.appendNode('dependency')
                dependencyNode.appendNode('groupId', it.group)
                dependencyNode.appendNode('artifactId', it.name)
                dependencyNode.appendNode('version', it.version)
              }
            }
          }
        }
      }
    }
    repositories {
      maven {
        name = PUBLISH_ARTIFACT_ID
        //正式版本上传地址
        def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
        //snapshot版本上传地址
        def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
        url = PUBLISH_VERSION.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
        credentials {
          username ossrhUsername
          password ossrhPassword
        }
      }
    }
  }
}
//签名信息
signing {
  sign publishing.publications
}

在对应的功能模块build.gradle顶部增加以下代码

apply from: '../mavencenteral.gradle'

编译AAR包

  1. 点击Android Studio 中右侧Gradle面板

  2. 找到对应模块

  3. 点击build分类中assemble脚本

  1. 推送SDK到仓库
    1. 点击Android Studio 中右侧Gradle面板
    2. 找到对应模块
    3. 点击publishing分类中的publish
//推送到本地
publishToMavenLocal
//推动到远程
publishReleasePublicationToMavenRepository

当上传完毕后,还未正式发布到公共仓库,还需要登录后台正式发布到仓库中

6. mavencentral发布

登录Nexus Repository Manager

输入在SonaType注册的账号密码

  1. 点击左侧暂存库, 即可在列表中看到推送的aar, 如果没有点击Refresh按钮刷新,或稍等几分钟
  2. 到目前为止,aar处于暂存状态,如果测试正常勾选上点击close按钮
  3. 稍等片刻后,刷新几次,状态改变后点击Release,发布AAR

发布Release版本后,此版本将无法修改、删除,只能发布新版本

0b2f6bf0a31449dc9110f799b2a88b3b

7.使用发布的AAR

在项目根目录添加以下配置:

allprojects {
    repositories {
        google()
        jcenter()
        // 增加mavenCentral中央仓库
        mavenCentral()
      	// 如果是上传到的本地仓库[.m2/]添加以下依赖
      	mavenLocal()
    }
}

在模块的build.gradle中添加依赖

dependencies {
	implementation 'com.test:ad-core:1.0.2-SHAPSHOT'
}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值