发布自己的开源库

本文详细介绍了如何将自己的代码模块整合并打包成库,包括设置本地Maven仓库、局域网仓库(略过)以及上传远程jcenter仓库的步骤。在上传远程仓库过程中,作者遇到了Gradle版本兼容问题和GBK编码错误,并分享了解决方案。最终成功将库发布到jcenter,并在其他项目中进行依赖引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序:开发时间长了,有一些自己开发用的顺手代码。每次用到时都是copy过来显然很麻烦。一直想着把自己常用的一些控件或者功能模块整合一下,打包到仓库里,用到时可以直接依赖。而且牛人都是自己开发框架和开源库。为了技术进步和后面用着方便。
上传的三种代码仓库:本底Maven仓库、局域网Maven仓库和远程jcenter仓库

1.本底仓库:
这个比较简单,做的时候也没遇到啥坑。简单说一下流程:
①在module的build.gradle文件增加以下内容:

apply plugin: 'maven'

uploadArchives{
    repositories.mavenDeployer{
        // 配置本地仓库路径,项目根目录下的repository目录中
        repository(url: uri('../repository'))
        // 唯一标识(通常为模块包名,也可以任意)
        pom.groupId = "com.xxx.annotation"
        // 项目名称(通常为类库模块名称,也可以任意)
        pom.artifactId = "annotation" 
        // 版本号
        pom.version = "1.0.0" 
    }
}

②在Studio中gradle里面找到该模块并执行uploadArchives,如下图:
在这里插入图片描述

③编译完成后,就会在repository设置的目录下生成对应的aar即相关pom文件,见下图:
在这里插入图片描述
④然后开始使用了,在项目的build.gradle下设置仓库地址,该地址即前面repository所在的路径,如下图:
在这里插入图片描述
最后就可以在模块里依赖此开源库了。

2.局域网仓库,主要针对的是公司内部的开源库,方便公司管控。可以安装使用Nexus,此处没有去尝试,先暂且略过。

3.上传远程的jcenter仓库
这里遇到的坑比较多,很多博客讲的都是有时间局域性,当时可以,现在的外部环境变化之后,已经没有效果了。我们接着采坑。
①首先需要注册一个Bintray账户,bintray官网注册地址。注册完成后,新建一个organization,在该organization创建一个仓库。仓库使用maven的
在这里插入图片描述
创建完成之后会在该组织下看到该仓库,如下图
在这里插入图片描述
在这里插入图片描述
创建完账号之后,下面开始选择使用的插件了。
②选择使用上传到jcenter仓库的插件。主要有两种:
gradle-bintray-plugin
这个插件的地址 https://github.com/bintray/gradle-bintray-plugin,使用此插件的人非常多,但是gradle配置内容较多,稍不小心就会出问题,这也就导致很多人根据别人的文章一步步走一般都不会成功了。

bintray-release
地址https://github.com/novoda/bintray-release,此插件相比上面的就简单很多了,主要是配置内容少了很多,即使出了问题解决也相对容易。(注意:此插件已经很久没有维护了,所以后面在使用的时候也遇到坑了。这里后面再说修改方式)
我是先选择的bintray-release。使用如下:

 dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
        //配置依赖的插件
        classpath 'com.novoda:bintray-release:0.9.2'

    }

然后在库模块build.gradle增加如下配置:

apply plugin: 'com.novoda.bintray-release'
publish {
    repoName = "maven"
    //bintray注册的组织organization的名字,此处需要注意
    userOrg = 'yn' 
    //compile引用时的第1部分groupId     
    groupId = 'com.xxx'         
     //compile引用时的第2部分项目名
    artifactId = 'annotation'    
    //compile引用时的第3部分版本号
    publishVersion = '1.0.0'    
    // 描述
    desc = 'This is a annotation library22'
    //该库的网址, 个人用户,此处一般为该项目存在git上的网址
    website = 'https://github.com/xxx/xxx'
}


注意:userOrg 为bintray注册的组织organization的名字
最后,在命令行执行如下命令:
gradle clean build bintrayUpload -PbintrayUser= … -PbintrayKey=… -PdryRun=false;
PbintrayUser为用户名,PbintrayKey为秘钥。
在这里插入图片描述

在这里插入图片描述
输入完密码之后,即可看到秘钥。此处会遇到以下坑
坑一

Could not create an instance of type com.novoda.release.internal.compat.gradle5_3.AndroidSoftwareComponentCompat_Gradle_5_3.
org/gradle/api/internal/java/usagecontext/LazyConfigurationUsageContext

处理:github上的解释是gradle版本不兼容导致,需要降低到5.6.4以下,但我尝试之后并没有效果,降到5.4.1也还是会报这个错,看了github上,有两年没有维护了,在gradle版本上有限制。其实我是想大不了把代码拉下来,改一下兼容高版本的,然后再放到git上。发现已经有人这样做了。所以我直接使用别人改的就可以了。这里需要改一下插件,改为如下:

	 dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
//        classpath 'com.novoda:bintray-release:0.9.2'
	//改为 用此插件
        classpath 'com.github.panpf.bintray-publish:bintray-publish:1.0.0'
    }

坑二
换了插件之后,发现编译还是报错,报GBK编码的错误。日志显示是在生成doc时报错了。如下

错误: 编码GBK的不可映射字符

处理:增加如下配置:

allprojects {
    ...
    tasks.withType(Javadoc) {
        options{
            encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
//        enabled = false
    }

    tasks.withType(JavaCompile) {
        options.encoding = "UTF-8"
    }
}

坑填完,上传完成后,即可在binary里面看到自己的库了。
在这里插入图片描述
③最后是使用了:
增加仓库地址,仓库地址为:https://dl.bintray.com/组织名/仓库名

allprojects {
    repositories {
        google()
        jcenter()
//        maven {url "file:\\D:\\soft_development\\android\\workspace\\project\\YnArc\\repository"}
        maven{ url 'https://dl.bintray.com/yn/maven'}
    }
....
}

然后在需要使用的模块添加依赖:

implementation("com.xxx.annotation:1.0.0")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值