【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~...

一、写在前面

  自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻麻再也不用担心依赖第三方jar包繁琐无趣啦。而,如果自己写一个开源库是一种怎样的体验,此乃利(装)国(逼)利(神)民(器)呀!

  而一路装逼不易,你会发现如果你要发布你的开源库到官方的Bintray/Jcenter并非易事,所以先去网上一探究竟,简单的,难的,五花八门,全(误)面(人)具(子)备(弟)!

  不得不感叹,学技术本身不难,难于达到一个目的的有多种方式,而各种方式参差不齐,给新手带来很大困惑。但是没办法,谁叫你是初学者呢,你所能做的,只能一步一步的折腾自己。

  网上的帖子真多呀,五花八门,注册账号有问题,编写过程有问题,版本不一致有问题,install有问题....每个人的步骤都不一致,所以难于得到一个真正正确的东西,导致你错了,却不知道错在何处,这是最难受的,好吧,程序员加班就是因为这些细节末梢的事情导致的,所以,我们要细致!!!

  其实,给个全面解析,楼主是诚惶诚恐,深怕一个小细节没有注意又去误人子弟,不过楼主也是折腾了很多时间才得以处理的,所以真心希望能给大家带来一点帮助,不足的地方,还请各位拍砖~

  废话不多说,直接进入正题,这里拿我一个随便的开源库来做处理,git地址:https://github.com/nanchen2251/CalendarView,这是一个炫酷的日历选择控件(支持左右滑动,农历,节假日显示等)

  演示效果:

  

二、注册账号

  1)首先你的有开门的钥匙,先去https://bintray.com注册一个账号吧(你也可以使用第三方登录Github,Google,但楼主发现,如果你的github一直都不能成功,原来是邮箱地址不能用qq邮箱);

  

  2)注册

  

  3)提交注册信息

  

  4)创建组织和仓库

  

  5)填写基本信息

  

三、配置项目相关

  1)在project的build.grald添加

 classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'

  

  2)module里面添加

  

//配置插件
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

  

  3)Module的build.gradle里面添加如下代码,注意注释

version = "1.0.7"    //这个是版本号,必须填写
def siteUrl = 'https://github.com/nanchen2251/CalendarView' // 项目的主页
def gitUrl = 'https://github.com/nanchen2251/CalendarView' // Git仓库的url

group = "com.nanchen.calendarview" // 这里是groupId ,必须填写  一般填你唯一的包名

install {repositories.mavenInstaller {// This generates POM.xml with proper parameters
        pom {project {packaging 'aar'// 项目描述,复制我的话,这里需要修改。name 'a view with the lunar calendar'   //项目描述
                url siteUrl// 软件开源协议,现在一般都是Apache License2.0吧,复制我的,这里不需要修改。
                licenses {license {name 'The Apache Software License, Version 2.0'url 'http://www.apache.org/licenses/LICENSE-2.0.txt'}}//填写开发者基本信息,复制我的,这里需要修改。
                developers {developer {id 'nanchen'            //你公司的idname 'nanchen2251'      //你的用户名email 'liushilin520@foxmail.com' // 你的邮箱
                    }}// SCM,复制我的,这里不需要修改。
                scm {connection gitUrldeveloperConnection gitUrlurl siteUrl}}}}
}
// 生成jar包的task,不需要修改。
task sourcesJar(type: Jar) {from android.sourceSets.main.java.srcDirsclassifier = 'sources'
}
// 生成javaDoc的jar,不需要修改
task javadoc(type: Javadoc) {options.encoding = "UTF-8"source = android.sourceSets.main.java.srcDirsclasspath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {classifier = 'javadoc'from javadoc.destinationDir
}//下面设置编码格式,重点注意,如果不设置可能会在gradlew install的时候出现GBK编码映射错误
javadoc {options {encoding "UTF-8"charSet 'UTF-8'author trueversion truelinks "http://docs.oracle.com/javase/7/docs/api"title 'A CalendarView Support Lunar Calendar For Android'   // 文档标题
    }
}artifacts {
//    archives javadocJar
    archives sourcesJar
}// 生成jar包
task releaseJar(type: Copy) {from( 'build/intermediates/bundles/release')into( '../jar')include('classes.jar')rename('classes.jar', 'okgo-' + version + '.jar')
}// 这里是读取Bintray相关的信息,我们上传项目到github上的时候会把gradle文件传上去,
// 所以不要把帐号密码的信息直接写在这里,写在local.properties中,这里动态读取。
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {//读取 local.properties 文件里面的 bintray.useruser = properties.getProperty("bintray.user")//读取 local.properties 文件里面的 bintray.apikeykey = properties.getProperty("bintray.apikey")configurations = ['archives']pkg {userOrg = "nanchen"        //发布到JCenter的组织,注意新版本的bintray是需要手动创建的repo = "maven"              //发布到JCenter上的仓库名称,注意新版本的bintray是需要手动创建的// 发布到Bintray上的项目名字name = "calendarview-library"websiteUrl = siteUrlvcsUrl = gitUrllicenses = ["Apache-2.0"]publish = true  // 是否是公开项目  
    }
}

  4)一些说明

  注意把你的user和apikey信息放在项目的gradle.properties里面(当然这是最好的建议)

  

sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk1\\Sdk
bintray.user=***
bintray.apikey=***

 

  注意:上面的userOrg是组织(organization)的id(上面创建过的),很多帖子都没有这个或者写的是用户名,新版本要使用你创建的组织名称,否则失败;repo是仓库(repository)的名称(上面创建的),我当初就是看的帖子这里说的不清楚怎么也不能成功。

  如果忘记了,则可以这样查看,组织对应id,仓库对应repo,项目对应上面的name。

 

   5)如果不出意外,这时候你已经可以在android studio的命令行操作Terminal工作空间输入gradlew install;

  6)如果你成功了,则可以在module的build/outputs下面看到你的aar文件

  7) 这时候你可以通过命令行输入gradlew bintrayUpload上传到bintray仓库。

  

   8)一切准备就绪,你这时候已经可以在bintray中看到你的库了,最后点击Add to Jcenter申请审核吧(一般2-3小时可以审核)

   9)发送请求

    填下你的groupId,直接send,就会发起一个打包版本的请求, 
    过几个小时,通过jcenter那边的审核就会在bintray上收到jcenter那边的同意消息提醒。 
    恭喜你,你的类库上传到jcenter成功了!大家都可以用你的类库了。

  

  10)开源库的后续更新

    我们上传完成后,如果发现类库中出现类库中的一个bug,这就涉及到更新问题,那么怎么更新呢?

    你只需要在,修改代码后,该本地build.gradle的版本号,按上面的操作,执行gradlew install,gradlew bintrayUpload,到bintray上点击Stage snapshots on oss.jfrog.org”同样发送一个请求,不用几分钟,就可以用了,升级,不像首次提交那样,非常快。马上就你可以更新github上的引用版本号,瞬间心情爽爽哒。

 

五、一些踩过的坑

  1)Lint found errors in the project

  Lint 检查默认是开启的,Lint 会检查项目中的语法错误,如果没有通过则无法继续。只需要在 Module 的 build.gradle 添加如下代码:

android {lintOptions {abortOnError false}
}

  2)编码问题

  也许你会遇到这样:

  在 windows 下 javadoc 默认的是系统编码,Windows 就是 GBK 编码。所以一旦 java 文件中出现中文注释就会报错,提示无法映射的GBK编码。

task javadoc(type: Javadoc) {options.encoding = "utf-8"
}

  如果还不行,则采用我上面的方式 

//下面设置编码格式,重点注意,如果不设置可能会在gradlew install的时候出现GBK编码映射错误
javadoc {options {encoding "UTF-8"charSet 'UTF-8'author trueversion truelinks "http://docs.oracle.com/javase/7/docs/api"title 'A CalendarView Support Lunar Calendar For Android'   // 文档标题
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

功能区不显示工具条_【新老客户必知】软件支持超高清屏显示器了

随着计算机硬件的不断更新换代显示设备的不断更新从原来的分辨率640 X 480啥原来分辨这么低呀?还记得DOS吗?或者Win95,win98吗当时显示器分辨率能调到800X 600很好了2000年左右随着纯平显示器的推出也有了高清显示器的概念那么一般我们说的高清显示器分辨…

Spring定时器的运用

为什么80%的码农都做不了架构师&#xff1f;>>> 一、spring4定时器任务配置如下&#xff1a; <bean id"jsapiTask" class"chan.ye.dai.wexin.JsapiTicketTimeTask" /><bean id"jobDetail"class"org.springframework.s…

ad18原理图器件批量修改_Altium Designer 15原理图设计基础

Altium Designer 15成为越来越多电子设计开发工程师EDA电路设计软件的首选&#xff0c;在学校学习Altium Designer的也越来较多&#xff0c;像单片机开发学习一样&#xff0c;EDA设计只要学会了&#xff0c;再学其他的设计软件就容易多了。上一节分享了《Altium Designer 15集成…

c++freopen函数_使用示例的C语言中的freopen()函数

cfreopen函数C语言中的freopen()函数 (freopen() function in C) Prototype: 原型&#xff1a; FILE* freopen(const char *str, const char *mode, FILE *stream);Parameters: 参数&#xff1a; const char *str, const char *mode, FILE *streamReturn type: FILE* 返回类型…

基本概念学习(7000)--P2P对等网络

对等网络&#xff0c;即对等计算机网络&#xff0c;是一种在对等者&#xff08;Peer&#xff09;之间分配任务和工作负载的分布式应用架构[1] &#xff0c;是对等计算模型在应用层形成的一种组网或网络形式。“Peer”在英语里有“对等者、伙伴、对端”的意义。因此&#xff0c;…

厦门one_理想ONE真是“500万内最好的车”?

提起罗永浩&#xff0c;不少人还停留在“砸冰箱、造手机”等早期事件。随着网络直播的兴起&#xff0c;罗永浩转战直播带货行业&#xff0c;但老罗毕竟是老罗&#xff0c;雷人语录一点没比以前少。前一段时间&#xff0c;罗永浩在微博中称&#xff1a;“理想ONE是你能在这个价位…

enter sleep mode黑屏怎么解决_【linux】 不要再暴力关机了,讲讲我最近遇到的问题和完美解决方案...

欢迎关注我的个人公众号&#xff1a;AI蜗牛车前言结束了每天的紧张的工作&#xff0c;这两天真的有些肝。这两天打打字&#xff0c;突然感觉手指头疼起来了&#xff0c;想意识到成天打了十多个小时的键盘&#xff0c; 手指头都疲劳了 之后这两天基本上除了基本的吃睡&#xff…

5中bug vue_苹果官网出BUG!这些都只要一两百元

近日&#xff0c;有网友在网上反馈称&#xff0c;他发现苹果官网商城出现了BUG&#xff01;众多上千元的产品&#xff0c;BUG价只需一两百元。比如Shure MOTIV MV88 Digital立体声电容式麦克风配件。正常售价1288元&#xff0c;而BUG后的价格是235元。UBTECH Jimu Astrobot Cos…

常用压缩,解压与打包

常用压缩格式&#xff1a; .zip .zg .bz2 .tar.gz .tar.bz2.zip格式压缩zip 压缩文件名 源文件#压缩文件注&#xff1a;压缩文件名写.zip后缀是为了标记该文件的压缩类型&#xff0c;方便管理。注&#xff1a;在压缩时有压缩格式转换&#xff0c;所以当源文件很小时&#xff0c…

css禁用选中文本_使用CSS禁用文本选择突出显示

css禁用选中文本Introduction: 介绍&#xff1a; Texts are the most fundamental elements of any websites or web pages, they form the basis of the web pages or websites because if you don’t write something that you will not be able to present anything. There…

CDN加速实现—varnish

CDN介绍&#xff1a; 1 . 对cdn的理解&#xff1a; CDN的全称是&#xff08;Content Delivery Network&#xff09;&#xff0c;即内容分发网络&#xff1b;加速器&#xff0c;反向代理缓存。CDN系统能够实时的根据网络流量和各节点的连接&#xff0c;负载状况以及到用户的举例…

3dmax如何拆分模型_3dmax制作装饰柜1

大家好&#xff0c;今天我来为大家讲解一下如何利用3dmax制作装饰柜。我们需要制作装饰柜模型&#xff0c;当我们为它添加一个材质后&#xff0c;它就是这样的效果。单击创建&#xff0c;选择图形&#xff0c;对象为样条线&#xff0c;选择矩形在场景中进行创建。单击修改&…

TODO:macOS上ThinkPHP5和Semantic-UI集成

TODO&#xff1a;macOS上ThinkPHP5和Semantic-UI集成1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分2. 把Xcode升级到8.1后继续安装Composer3. 使用composer创建TP5项目MWL-Dispatchcomposer create-project topthink/think MWL-Dispatch4. 配置apac…

距离传感器控制灯泡代码_生迪全彩智能 LED 灯泡体验评测

市面上大多数智能灯具无外乎智能控制&#xff0c;冷暖标准区间的简单调光&#xff0c;仅仅满足我们日常照明之外&#xff0c;似乎用处不多。如果有一款能在自己房间制造多彩氛围的灯泡就好了。这次有幸体验到了华为智能家居生态链产品生迪全彩智能 LED 灯泡&#xff0c;才发现彩…

mysql启动与关闭(手动与自动)

手动管理mysql的启动与关闭 [rootmysql ~]# service mysql start --手动启动mysqlStarting MySQL. SUCCESS![rootmysql ~]# service mysql stop --手动关闭mysql Shutting down MySQL.. SUCCESS! [rootmysql ~]# mysqld --verbose --help --查看MySQL的默认参数的具体值 如果每…

内部导线拉力测试_珠海后环回收试验机现金支付拉力试验机回收和谐温馨的环境...

珠海后环回收试验机现金支付拉力试验机回收和谐温馨的环境深圳富兴二手设备回收&#xff0c;拉力试验机回收&#xff0c;恒温恒湿箱回收&#xff0c;恒温恒湿试验箱回收&#xff0c;恒温恒湿培养箱回收&#xff0c;高低温试验箱回收&#xff0c;高低温冲击试验机回收&#xff0…

lvs负载均衡—ldirectord(DR模式的健康检查)

作用&#xff1a; 健康检查对企业而言也是由为重要&#xff0c;在生活中&#xff0c;有时候访问网页访问不到&#xff0c;就会跳出来一些图形告诉你访问失败&#xff0c;这就是健康检查的作用&#xff0c;当服务器都挂掉的时候&#xff0c;告诉你暂时访问不了。 ldirectord是后…

Reactor by Example--转

原文地址&#xff1a;https://www.infoq.com/articles/reactor-by-example Key takeaways Reactor is a reactive streams library targeting Java 8 and providing an Rx-conforming APIIt uses the same approach and philosophy as RxJava despite some API differencesIt i…

springboot项目后台运行关闭_springboot项目在服务器上部署过程(新手教程)

环境&#xff1a;服务器系统&#xff1a;ubuntu16jdkmysql工具 xshell6下载地址&#xff1a;https://www.netsarang.com/download/down_form.html?code622&downloadType0&licenseType1xftp6下载地址&#xff1a;https://www.netsarang.com/download/down_form.html?c…

如何在React Native中使用文本输入组件?

You know, an app becomes more authentic and professional when there is the interaction between the app and the user. 您知道&#xff0c;当应用程序与用户之间存在交互时&#xff0c;该应用程序将变得更加真实和专业。 The text input component in react-native brin…