Android 进阶——上传Java项目及Android AAR至JCenter远程仓库完全攻略(二)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/CrazyMo_/article/details/90343285

引言

前一篇文章Android 进阶——自定义Gradle插件的三种方式初探与上传至本地仓库完全攻略(一)总结了Gradle插件的基本语法和创建Gradle插件的 三种形式以及上传到本地仓库C:\Users\xxx.m2\repository的方法,这一篇主要总结下上传到JCenter远程仓库的核心流程,其实也不难就是使用官方提供的插件。

一、注册JCenter

jcenter是比较常用的一个远程仓库,上传到jcenter步骤也很简单,当然首先你得住注册一个账号并登录jcenter获取API KEY(在用户头像下的Edit Profile菜单中可以查到)创建一个repo,然后像上传到本地仓库一样使用官方提供的插件配置相关脚本,再通过执行bintray插件的bintrayUpload任务上传到JCenter

1、注册一个账号并登录jcenter获取API KEY(在用户头像下的Edit Profile菜单中可以查到)创建一个repo。

  • 打开jcenter官网并注册免费个人账户(公司账户是收费的,邮箱方面尽量使用国外的邮箱Gmail、Github等,可能需翻墙)
    在这里插入图片描述
  • 创建一个Repository(针对公司账户也可以先建立一个Orgnization,在Orgnization下创建Repository,在上传的时候也必须配置Orgnization,而对于个人账户来说Orgnization是可选的)
    在这里插入图片描述
    点击Create
    在这里插入图片描述
  • 进入Edit Profile——>API Key获取API Key备用。

二、上传Java项目到jcenter

  • apply plugin: ‘com.jfrog.bintray’ 引入Bintray插件
  • apply plugin: “maven-publish” 引入maven-publish插件

1、引入并配置maven-publish插件生成工件

具体步骤详见上一篇文章Android 进阶——自定义Gradle插件的三种方式初探与上传至本地仓库(一),maven-publish插件可以,Gradle提供了几种部署构建工件(artifacts)存储库的方法。将工件的签名部署到Maven存储库时,还需要签署已发布的POM文件,除了这些工件,在上一篇文章还配置了生成的SourcesJar和DocsJar等产物,所以接下来只需要利用bintray插件上传到JCenter即可。

2、引入bintray插件并配置bintray节点

2.1、引入bintray插件

必须先配置插件的远程库和classpath,才能引入这个插件。

apply plugin: 'com.jfrog.bintray'
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
    	//需要注意下Gradle的版本信息,我这里配置的Gradle是3.3
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
    }
}

在对应Module(或者Project)下的Gradle 构建脚本里配置仓库及对应的classpath,引入成功之后,就会看到一个用于上传配置的工件到JCenter的名为bintrayUpload的任务
在这里插入图片描述

2.2、在gradle构建脚本中添加并配置bintray节点

这里的gradle构建脚本并不是特指Module 默认的build.gradle脚本,任何gradle脚本都可以只要你把它使用起来,你可以把这些写到一个单独的gradle脚本,然后再apply from: 使用。配置属性时可以支持两种形式:

  • 直接在gradle脚本中配置
  • 获取系统单环境变量配置

主要配置内容有:

  • 在bintray的节点下配置jcenter用户的信息
  • 在bintray的下配置publications的信息,用于配置要上传的内容
  • 在bintray的子节点pkg中配置要上传的包信息
  • pkg的子节点version中配置版本包信息

/**
 * upload2jc.gradle
 * 可使用两种方式进行配置,1)直接在gradle脚本中配置  2)先在环境变量中配置,再获取系统环境变量的值进行配置
 *  user = System.getenv('BINTRAY_USER')
    key = System.getenv('BINTRAY_KEY')
 */
bintray{
    //jcenter的用户名
    user = 'crazymo'
    //jcenter的用户名下的API KEY
    key = userkey
    //配置要上传到jcenter的内容,其中plugin 对应外层publishing下的publications的名称
    publications = ['plugin']
    //添加上传的包的信息
    pkg {
        repo = 'demo' //需要上传到的jcenter仓库名
        name = 'test_java'  //上传的项目名 对应JCenter中的Package Name
        //userOrg = 'bintray_user' //jcenter中用户的org属性(可选项),对于个人账号可以不用配置
        licenses = ['Apache-2.0']
        vcsUrl = 'https://xxxx.com'//源码托管的版本控制地址,上传到JCenter公共库的话且勾选了snapshots选项必须填否则审核不通过,如果上传到github的话可以配置github的地址
        version {
            // name ="1.0" 配置版本名称如果不配置会默认使用前面的version值
            desc = 'just test'
            released  = new Date()
            vcsTag = '1.0'
            attributes = ['gradle-plugin': 'xxxxx']
        }
    }
}

3、使用gradlew bintrayUpload指令上传至JCenter

执行gradlew bintrayUpload上传到JCenter,或许会失败,多尝试几次就好了,或者换个可靠的网络。
在这里插入图片描述

注意:在执行Gradle task 时最好使用命令行形式,直接在图形界面双击任务可能会出现莫名其妙的bug

刷新JCenter对应的Repo,会提示你有多少Item 需要 Publish 或者Discard,点击Publish 后再次刷新就会看到,
在这里插入图片描述
至此已经成功上传到了JCenter的用户的私有库

4、使用JCenter中的库

我们可以理解成JCenter仓库分为两种类型:用户私有库公共库,用户私有库从一定程度来说是仅对用户自己可见的,而公有库则是对所有用户可见。在我们成功上传到JCenter,没有点击Add to JCenter之前,得到JCenter官方的审核之前,都是私有库类型的,这意味着其他用户如果没有配置对应私有库的链接地址,单独通过Gradle 脚本指令是无法引入的,所以使用不同的库步骤略有差异。

4.1、使用JCenter私有库

使用JCenter私有库时不能像引用其他已经Add to JCenter的其他开源库直接引入,无论是引入私有酷中的普通Jar还是插件Jar,核心步骤都只需要两步:

  • repositories节点里配置插件库的下载地址及对应的classpath,使用插件的话需要在buildscript节点下配置;使用普通Jar的话需要在allprojects节点下配置。
buildscript{
    repositories{
        maven{
            //配置指定链接的远程JCenter仓库的下载地址
            url 'https://dl.bintray.com/crazymo/demo'
        }
    }

    dependencies{
        //对应的加载路径,对应插件库里的POM文件, classpath 就是 group :artfectId:version这个值
        classpath 'com.crazymo.plugin:hiplugin:1.0'
    }
}
  • 通过 指令complie 'groupId:artifactId:version’引入Jar库或者通过apply plugin:pluginId引入插件Jar库

在这里插入图片描述

针对于插件和普通Jar包的引入,所配置的节点有所不同, buildscripts是配置给Gradle 程序使用的,所以引入插件时需要配置插件的地址和classpath到buildscripts节点下;而普通Jar是给Android或者Java应用使用的,需要配置到allprojects这个给Android应用使用的节点下

从远程库下载成功之后,会保存在用户的远程库的默认的缓存目录xxx \ .gradle\caches\modules-2\files-2.1对应的目录下
在这里插入图片描述

4.2、使用JCenter公有库

在点击Add to JCenter之后,待JCenter审核通过之后,点击小信封处就看到审核通过的邮件,此时就已经成功上传到了公共库,无需显示指明repo的具体地址了,只需要配置对应的远程库的类型,通过指令complie 'groupId:artifactId:version’引入Jar库或者通过apply plugin:pluginId引入插件Jar库。通俗来理解,在我们

5 小结

插件项目还是Java项目,本质上都可以打包成jar 包,但是插件项目打包而成的Jar包的话,要使用插件是得通过 apply plugin:pluginId 的形式来引用这个插件;而普通Jar则是通过complie "groupId:artifId:versionId"引入的。我们可以使用Gradle构建的工程看成由两个子项目构成:Gradle 看成一个独立的Java程序和真正的Android项目,Gradle 插件只能用于在Gradle 项目上的,只能使用classpath方式来给Gradle 引入依赖;而普通的Jar 用在Android项目时,需要complie 来指定给Android项目引入的依赖。以上仅个人愚见,仅供参考。

ps:源码传送门或者去我的码云下去自己下载,下一篇上传AAR到JCenter库。

猜你喜欢

转载自blog.csdn.net/CrazyMo_/article/details/90343285