发布开源库到JCenter所遇到的一些问题记录
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布
这周末自己瞎折磨了下,如何发布开源库到 JCenter,然后这过程中碰到了一些问题,在此记录分享一下
本篇是基于上一篇:教你一步步发布一个开源库到 JCenter 介绍的流程、步骤中所遇到的问题,所以没看过上一篇的,可以去看看哈~
- Error:No service of type Factory available in ProjectScopeServices.
原因:android-maven-gradle-plugin 插件的 bug
解决:更换版本,本次测试出问题版本 1.3,更改为 1.4.1 后正常
做法:在根目录的 build.gradle 文件中修改插件版本:
dependencies {
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
}
- Error:Could not get unknown property 'publishedGroupId' for project ':tv' of type org.gradle.api.Project.
原因:apply from 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle' 代码放错位置
解决:由于上述 apply from 代码的意思是使用存储在网上的脚本模板文件,模板文件中使用了很多还未声明的变量,所以 apply from 这行代码应该放置在 ext {} 变量声明代码块之后
做法: build.gradle 文件中以下几行代码应该按顺序来,第一行 apply from: 'bintray-config.gradle' 其实就是脚本模板文件中的变量声明,赋值代码,也就是 ext{} 代码块,只是将其单独放置于一个 gradle 文件中,这里也可以直接将 ext{} 代码替换掉 apply from: 'bintray-config.gradle'
apply from: 'bintray-config.gradle'
//ext{} 变量声明,赋值代码块必须在以下两个脚本模板文件之前
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
- Error:Cause: android.compileSdkVersion is missing!
原因:apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle' 代码放错位置
解决:跟 2 的理由类似,这个脚本是用于将本地生成的 pom,aar 等文件上传至 bintray 仓库,但这个脚本的运行需要依赖于一些 android {} 块的属性配置;所以并不是所有 apply from 的代码都是放置于 build.gradle 的开头,这里建议将 第 2 中的三个 apply from 代码都放置于 build.gradle 文件末尾。
以上 1-3 问题均是在上一篇中的步骤,第 2 步:配置本地 gradle 脚本插件,的过程中操作不当导致的
- Execution failed for task ':tv :javadoc.
原因:执行 gradlew install 构建过程中出错,这是由于执行生成 javadoc 过程中出问题,至于为什么出问题可以具体查看日志,例如我这里:

我这里是由于在代码中有中文,所以导致的构建错误
解决:有没有其他解决方案我不清楚,我又不想将这些中文注释给删除掉,那么我只能将这个 javadoc 的 task 给关掉了,反正我上传到 JCenter 上的开源库也只是我自己在用,不需要 javadoc 文档
做法:由于 javadoc 的 task 是在 bintray 提供的脚本模板文件中,所以只能修改这个模板文件,那么在上一篇的第 2 步:配置本地 gradle 脚本插件,就不能用 apply from 'http://...' 的形式了,因为这种形式无法修改模板文件。
那么就需要在本地新建一个 installv1.gradle 文件,然后将这个脚本文件里的代码拷贝进这个新建的文件中:
//将下面所有的 javadoc task 注释掉,不用这个功能
apply plugin: 'com.jfrog.bintray'
version = libraryVersion
if (project.hasProperty("android")) { // Android libraries
task sourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
//1. 这里是第1处
// task javadoc(type: Javadoc) {
// source = android.sourceSets.main.java.srcDirs
// classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
// }
} else { // Java libraries
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
}
//2. 这里是第2处
//task javadocJar(type: Jar, dependsOn: javadoc) {
// classifier = 'javadoc'
// from javadoc.destinationDir
//}
artifacts {
//3. 这里是第3处
// archives javadocJar
archives sourcesJar
}
// Bintray
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
println user
println key
configurations = ['archives']
pkg {
repo = bintrayRepo
name = bintrayName
desc = libraryDescription
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = allLicenses
publish = true
publicDownloadNumbers = true
version {
desc = libraryDescription
gpg {
sign = true //Determines whether to GPG sign the files. The default is false
passphrase = properties.getProperty("bintray.gpg.password")
//Optional. The passphrase for GPG signing'
}
}
}
}
然后在 module 下的 build.gradle 文件的末尾中,将原本的 apply from 代码换成下面的:
apply from: 'bintray-config.gradle'
apply from: 'bintrayv1.gradle'
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
上面两个 apply from 是指使用 本地脚本文件,最后一个 apply from 是指使用网络上的脚本文件,本地脚本文件可以任自己修改
- 提几点 bintray 网站操作的一些注意事项
- 注册账号的时候 qq 邮箱不能使用,建议使用 gmail 邮箱
- 在 bintray 上创建完仓库后,也顺便将 package 创建了吧,package 对应着本地项目中一个 module,至于不创建 package,直接在本地执行上传操作能否可行,我没测试过
- ext {} 变量声明的代码块里,具体哪些属性值可以不配置,我没测试过,但感觉还是按模板来,将每个属性都进行配置比较好

最近(2018-03)刚开通了公众号,想激励自己坚持写作下去,初期主要分享原创的Android或Android-Tv方面的小知识,准备可能还有点不足,感兴趣的可以先点一波关注,谢谢支持~~
发布开源库到JCenter所遇到的一些问题记录的更多相关文章
- 教你一步步发布一个开源库到 JCenter
今天想来分享下,如何一步步自己发布一个开源库到 JCenter 这方面的博客网上已经特别多了,所以本篇并不打算仅仅只是记录流程步骤而已,而是尽可能讲清楚,为什么需要有这个步骤,让大伙知其然的同时还知其 ...
- Android Library 发布开源库 JCenter & JitPack 攻略
对于Android 的开源库,一般通过 JCenter 或者 JitPack 发布开源.两种方式均可~ 当你造了一个好玩有用的东西想要分享给大家时,开源出来便是一种好方式~ 一. 上传开源库到 JCe ...
- 【转】用JitPack发布开源库时附加文档和源码
来自:http://www.gcssloop.com/course/jitpack-sources-javadoc 用JitPack发布开源库时附加文档和源码 很早之前写过一篇用JitPack发布An ...
- [Gradle系列]Gradle发布module库到jCenter, 并构建自己的企业Maven私服
Tamic 作者: http://blog.csdn.net/sk719887916/article/details/53224544 前言 andorid开发者经常会看到xx公司发布了xx项目,xx ...
- 发布开源项目到Jcenter
前言 为了将阿里云短信开箱即用发布到Jcenter仓库,前前后后花费了1天半的时间,把端午节都搭进去了.终于今天收到了Jcenter的消息,自己发布的包被添加到了Jcenter仓库,也算给开源社区做了 ...
- 模仿慕课网一步步发布一个开源库到 JCenter
H:\common\-common-25.2.2\upload.gradle // Bintray /* Properties properties = new Properties() proper ...
- 【我的Android进阶之旅】如何快速寻找Android第三方开源库在Jcenter上的最新版本
问题描述 解决方法 先了解compile comsquareupokhttpokhttp240的意义 了解Jcenter和Maven jcenter Maven Central 理解jcenter和M ...
- android开源库发布到jcenter图文详解与填坑
相信很多人都用过开源项目,特别是android studio普及以后,使用开源库更方便简单.而如何上传开源库到jcenter供大家方便使用,虽然网上也有教程,但还是遇坑了,最后总结一下,希望可以帮助大 ...
- 发布Android开源库,看这个文章就够了!
最近在Flipboard实习期间写了一个轮播工具,技术上没什么难点,不过动画效果还是不错的,决定改改代码写个库开源出去.项目地址:http://github.com/chengdazhi/Decent ...
随机推荐
- 【一天一道LeetCode】#258. Add Digits
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- nginx+uwsgi+django 部署原理
python开发群里经常有同学问 nginx+uwsgi+django 着了教程部署,但是不知道他们之间怎么样的关系,于是我就google到了一个让我看起来很认同的图,大家看了也比较认同,于是就分享出 ...
- qualcomm memory dump 抓取方法
Memory dump是系统出现crash时常用的分析故障原因的方法,qualcomm 各子系统运行时,为方便debug,都会开辟ram log和debug variable用于保存各系统运行信息及健 ...
- UNIX环境高级编程——线程同步之读写锁以及属性
读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程.当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步, 互 ...
- ISLR系列:(1)线性回归 Linear Regression
Linear Regression 此博文是 An Introduction to Statistical Learning with Applications in R 的系列读书笔记,作为本 ...
- AngularJS进阶(二十八)解决AngualrJS页面刷新导致异常显示问题
解决AngualrJS页面刷新导致异常显示问题 绪 俗话说,细节决定成败,编程亦是如此.编程过程中我们可能会不自觉的忽视一些细节问题,殊不知,这些细节正是导致页面显示出现问题的地方.今略举一例,与君共 ...
- Unity访问Access数据库
首先,准备工作: 创建一个Access 数据库,命名AccessTest.accdb,添加一些数据用于测试 准备System.Data.dll与System.EnterpriseServices.dl ...
- 【Android 应用开发】分析各种Android设备屏幕分辨率与适配 - 使用大量真实安卓设备采集真实数据统计
.主要是为了总结一下 对这些概念有个直观的认识; . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/198 ...
- java垃圾回收机制,以及常用的回收算法
记得之前去平安面试的时候,面试官问到了垃圾回收,我当时也就是说说了垃圾回收的原理,但是具体有哪些实现策略,我当时是懵的. 概念: Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定 ...
- MySQL正则表达式初步
如果想要了解完整的MySQL手册, 请访问: MySQL 5.1参考手册 你还可以学习: MySQL学习精粹 我们知道,在SQL之中,可以用 like 这个谓词(表达式) 来进行模糊检索,并支持 %, ...