什么是Jcenter仓库?
- 个人认为Jcenter类似于git/svn,是一个项目管理工具,我们可以用它存储一些公共的组件,类库,插件等实现共享功能,同时我们可以对其版本进行控制。那我们在项目的开发过程,当需要某个组件或类库,直接依赖即可,无需复制代码,或依赖一个module了,基本是一句代码可以搞定。
如何将我们的项目发布到JCenter进行共享了?
- 使用Bintray将项目发布到JCenter
如何配置?
如何使用bintray-release来将项目发布到Jcenter?
-
1.注册开发者账号,在这里要注意账号体系分为企业账号和普通开发者账号的,企业账号有一个月的试用期限,在刚注册的一个月内,是不能将项目发布到Jcenter的(不提供add to Jcenter按钮),所以我们在注册的时候需要注意了。
-
2.到github获取bintray-release的版本
-
3.在Android Studio进行配置
-
在项目的build.gradle进行配置
dependencies { classpath 'com.novoda:bintray-release:0.9.1' }
-
在开发过程中,我们会写一些注释,而在发布编译时需要生成对应JavaDoc文档,这时可能会有编码问题,所以我们需要设置编码问题,不然会有编码警告
buildscript { dependencies { classpath 'com.novoda:bintray-release:0.9.1' } //注释中有汉字,需要这里处理 tasks.withType(Javadoc) { options.encoding = "UTF-8" } }
-
在我们要发布的module的build.gradle文件最后中进行如下配置
apply plugin: 'com.novoda.bintray-release' tasks.withType(Javadoc) { options.encoding = "UTF-8" } publish { userOrg = 'askedevelop' //bintray账户下某个组织id repoName = 'keepLive' //远程仓库名 可以自定义 如不设置 默认名为maven groupId = 'com.project.keeplivelibrary' //maven仓库下库的包名,一般为模块包名 artifactId = 'keepLiveLib' //项目名称 publishVersion = '1.0.0' //版本号 desc = 'keep live for android' //项目介绍,可以不写 website = '' //项目主页,可以不写 licences = ['Apache-2.0'] }
-
-
在Android Studio的Terminal面板中执行下面命令,其中BINTRAY_USERNAME替换为你的binatray用户名,BINTRAY_KEY替换为上面获取的API Key,-PdryRun=false会上传到仓库中,如果为true,只会执行gradle任务,但不会上传。替换完成后回车执行
gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false
- 成功之后最终结果
-
这时候其实我们并没有将项目完全发布到Jcenter,需要进过审核才可以,但是我们已经可以使Maven实现远程依赖了。
//1.在整个项目的build.gradle配置Maven allprojects { repositories { google() jcenter() maven { url 'https://www.jitpack.io' } //添加我们的maven 地址 maven { url 'https://dl.bintray.com/askedevelop/keepLive' } } } //2.在需要添加依赖库的module中添加依赖 implementation 'com.project.keeplivelibrary:keepLiveLib:1.0.0'
-
当我们的依赖库被Jcenter审核通过后,我们可以去掉 maven { url ‘https://dl.bintray.com/askedevelop/keepLive’ },因为Android Studio默认以Jcenter作为默认的中央仓库,所以我们需要点击Add To Jcenter提交Jcetner审核即可
会出现那些坑
-
问题1
当前Android Studio的版本已经到了 3.5,gradle的版本达到了5.4.1, 编译上传的时候会报如下错误
WARNING: API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'. It will be removed at the end of 2019. For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
解决方案:将gradle的版本降低至4+
- 问题2
HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]
解决方案:因为bintrary默认会为项目设置远程仓库名为maven,但是我们在创建项目时其远程仓库名不是maven,所以我们需要根据实际情况设置
- 问题3
-
问题4
GBK编码问题,javadoc编码问题
解决方案:在项目的build.gradle下设置编码,或者在module下build.gradle中添加该注释
//1.在项目的build.gradle下
buildscript {
.....
//注释中有汉字,需要这里处理
tasks.withType(Javadoc) {
options.encoding = "UTF-8"
}
}
//2.在项目的build.gradle下,与Android 以及dependencies平级
tasks.withType(Javadoc) {
options.encoding = "UTF-8"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。