备注:别人写的比较好的文章
之前我发布过一些Java语言开发的库到Bintray(使用Gradle发布Library到JCenter (Update),不过由于是很久前写的,仅供参考),最近我用Kotlin写了一个库,想发布到Bintray上去,最开始我按照原来的方式成功发布到了Bintray,然后我创建了一个测试工程依赖刚发布的库,在使用的时候出现了kotlin.jvm.internal.xxxx类找不到的异常,按道理说我发布的库依赖了Kotlin,自然会传递依赖到当前工程,然后我查看了库里面的POM文件,里面并没有生成dependencies部分的描述,所以这应该是主要原因。
原因找到了,但解决办法呢?这种发布方式我已经使用过无数多次了,重来没有出现过这样的问题,然后我一直思考以前发布跟现在发布的不同之处,最开始我一直认为最大的不同点在于以前发布的是Java的库,现在是Kotlin的库,因此我主要从这方面去思考,当然找到了一些资料,虽然不能解决我面临的问题,但还是可以做个记录,以便后续用到:
http://android-kotlin.net/2017/04/26/Kotlin%E4%B8%8A%E4%BC%A0%E5%88%B0Jcenter/
https://blog.csdn.net/mochiwxtianya/article/details/78510116
既然从上面入手不行,再想想其它的不同之处,最后我想到最近升级了gradle,这次发布的gradle版本与之前不同,抱着试一试的态度,我将当前库的gradle版本与之前一致重新发布,这一次问题得到了解决。
对于gradle升级带来的发布bintray的问题,有谁有相关资料的话,还望解惑。
2019-12-17更新:
关于此问题,某然在一篇文章中找到原因:
以下为相关描述
随着 Android Studio 3.0 的发布,Gradle 更新到了 4.1+,在 Gradle 3.6 之后的版本,增加了 implementation 和 api 等新的依赖命令,需要注意的是,以上两种插件的 Gradle 版本均在 3.6 以下,所以是不支持新的命令的。这样会引发一个错误,当你的 Labrary 依赖其他开源项目的时候,如果你是使用的 implementation 和 api 等新的依赖命令,在生成 aar 和 maven pom 文件时,pom 文件中并不会把你 Labrary 中所依赖的其他库配置进去,这样当在使用你的 Labrary 构建依赖的时候,Gradle 不会把 Labrary 中所依赖的库一并下载下来,当使用这些库的时候就会引发 ClassNotFound 的错误。所以在上面两个插件还没有更新到最新版的 Gradle 的时候,请继续使用旧的 compile 依赖命令。
具体链接地址:https://www.jianshu.com/p/af110569a573
另附属Bintray插件的官方地址:https://github.com/bintray/gradle-bintray-plugin
里面可以查看到如何在pom中添加dependencies部分。