发布开源库到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 ...
随机推荐
- UNIX环境高级编程——信号基本概述和signal函数
一.为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程.2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断.3. 如果CPU当前正在执行这个进程的代码,则 ...
- Uva - 810 - A Dicey Problem
根据状态进行bfs,手动打表维护骰子滚动. AC代码: #include <iostream> #include <cstdio> #include <cstdlib&g ...
- PHP中关于foreach的简单的用法总结
在php中使用循环方式输出数组里面的内容有好多种方式,我们既可以采用数组迭代循环的方式,当然也可以采用下面的foreach方法,日常开发中用到的最多就是它.下面我们就先看一下它的用法吧: //语法是: ...
- input驱动12种事件类型Event types的含义
linux2.6 input subsystem中部分相关结构体的分析 最近在做linux2.6的键盘驱动程序的工作,接触到了input subsystem这一概念,现把我对其中相关结构体的理解写出 ...
- 将Ext JS 5应用程序导入Web项目以及实现本地化
在Ext JS 5,使用了新的脚本和样式加载方式,这对于将应用程序导入到Web项目中产生了点小麻烦.而对于本地化文件的导入,也采用了新的方式,本文将一一解答这些问题. 将Ext JS 5应用程序导入W ...
- 关于jQuery中的trigger和triggerHandler方法的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 纯命令提交代码到git仓库(教你怎么装逼)
如果不喜欢用命令的请点链接:http://blog.csdn.net/xiangzhihong8/article/details/50715427 我这里用纯命令,主要是因为这两天不知道什么原因,ba ...
- 解决unbuntu14.04上的eclipse自动退出的问题
新安装的ubuntu14.04版,把以前12.04上正常使用的eclipse拷贝到14.04上后,启动eclipse后,输入代码时出现点"."提示符就会自动重启. jdk是1.7. ...
- UML之活动图
活动图,她的英文名字叫Activity Diagram,是一种说明业务用例实现的工作流程,活动图是UML大家族中用于对系统的动态方面建模的无中图之一. 举个简单的例子,以建房的工作流为例,首先,我们要 ...
- rabbitMQ之AMQP协议
1.什么是AMQP协议 即高级消息队列协议,规范客户端与消息中间件服务器之间的通信,并能相互操作. 2.AMQP协议的作用 降低应用程序之间的耦合度,这样不同应用之间的集成的难度将变得更小,并开发出更 ...