以上标题只是个总结,此篇文章实际是踩坑记录。java
*-source.jar
源码包下载到本地并解压,发现对于混合开发的项目,*-source.jar
包只包含了Java
源码,Kotlin
源码并无被打包进来。找到lib用的打包发布到maven的gradle task 发现是这么配置源码包的:android
task sourcesJar(type: Jar) {
if (project.hasProperty("android")) {
from android.sourceSets.main.java.sourceFiles
} else {
println project
from sourceSets.main.allSource
}
classifier = 'sources'
}
复制代码
去网上搜了一圈,好像你们都是这么配置from
的bash
具体去Google详细的“kotlin”+“aar”+“源码”关键字时,找到的大多都是开源打包插件的maven-publish
等的配置,而咱们公司的是本身写的,无法参考。maven
尝试了一下使用from android.sourceSets.main.allSource
、from android.sourceSets.main
等配置,都报错。这个多是由于项目使用了默认的源码路径没有配置sourceSets
,因此检查不到ide
但偶尔有一次我使用from android.sourceSets.main
时报错提示以下gradle
* What went wrong:
Cannot convert the provided notation to a File or URI: source set main.
The following types/formats are supported:
- A String or CharSequence path, for example 'src/main/java' or '/usr/include'.
- A String or CharSequence URI, for example 'file:/usr/include'.
- A File instance.
- A Path instance.
- A Directory instance.
- A RegularFile instance.
- A URI or URL instance.
复制代码
灵感乍现,from
后面能够跟路径呀。因而尝试以下配置ui
from android.sourceSets.main.java.getSrcDirs()
复制代码
果真奏效,task执行不报错,*-source.jar
也将kt源码打包进去了。所谓不能调试的问题也就不存在了。spa
猜想使用.sourceFiles
时,gradle筛选了.java
类型的文件进行打包。插件
而使用.getSrcDirs()
把整个目录做为参数时,gradle再也不排查文件后缀,把全部目录下全部文件都打包进来了。调试
最终修改了打包任务以下,解决了含有kotlin的项目的打包问题:
task sourcesJar(type: Jar) {
if (project.hasProperty("kotlin")) {
from android.sourceSets.main.java.getSrcDirs()
} else if (project.hasProperty("android")) {
from android.sourceSets.main.java.sourceFiles
} else {
println project
from sourceSets.main.allSource
}
classifier = 'sources'
}
复制代码