以上標題只是個總結,此篇文章實際是踩坑記錄。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'
}
複製代碼