文章大纲
引言
前一篇文章Android 进阶——自定义Gradle插件的三种方式初探与上传至本地仓库完全攻略(一)总结了Gradle插件的基本语法和创建Gradle插件的 三种形式以及上传到本地仓库C:\Users\xxx.m2\repository的方法,这一篇主要总结下上传到JCenter远程仓库的核心流程,其实也不难就是使用官方提供的插件。
- Android 进阶——自定义Gradle插件的三种方式初探与上传至本地仓库完全攻略(一)
- Android 进阶——上传Java项目及Android AAR至JCenter远程仓库完全攻略(二)
- Android 进阶——上传Java项目及Android AAR至JCenter远程仓库完全攻略(三)
- Android 进阶——上传Java项目及Android AAR至个人Nexus 3私服仓库完全攻略(四)
一、注册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项目引入的依赖。以上仅个人愚见,仅供参考。