发布开源库到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 ...
随机推荐
- Java四大名著下载大全(中文+英文)
转自:http://www.blogjava.net/kuuyee/archive/2013/06/03/400084.html 抽时间整理了一下Java四大名著,分享出来方便大家学习! Note 郑 ...
- iOS开发基础block的形式讲解
前几个星期,我利用通知写了一个仿京东选择地址的Demo(http://blog.csdn.net/hbblzjy/article/details/52212879),后来看过一篇文章说,尽量少用通知, ...
- Android进阶(六)文件读操作
Android中文件的读写操作与Java中文件的读写操作是有区别的.在Java中,读文件操作如以下代码所示: public class FileRead { private static final ...
- UNIX环境高级编程——信号基本概述和signal函数
一.为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程.2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断.3. 如果CPU当前正在执行这个进程的代码,则 ...
- Java数组的应用:案例:杨辉三角,三维数组,字符串数组
//import java.util.Arrays; //包含Arrays //import java.util.Random; public class HelloWorld { public st ...
- Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线
Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线 我们在开发中常常会注意到一些Crash,这正是很头疼的,而且Crash会带来很多意想不到的状态,很恶心 ...
- Uva - 506 - System Dependencies
模拟题,注意显示安装和隐式安装,显示安装的必须显示显示删除.把名字转化为整数维护.其他注意都注释了.输入稍微多一下,题目不是很麻烦. AC代码: #include <iostream> # ...
- xml之DOM方式解析,DOM4J工具解析原理
DOM解析原理: DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到x ...
- Github最流行的10,000个Java项目使用的类库
本文由 ImportNew - Andy.Song 翻译自 takipiblog.欢迎加入翻译小组.转载请见文末要求. 前言 作为Java开发人员,总是需要面临这门不断成熟.高速改进中的语言.开发人员 ...
- HTML移动开发参考
小强的HTML5移动开发之路 http://blog.csdn.net/dawanganban/article/details/17591373 其他: http://blog.csdn.net/gf ...