tools.jar到Kotlin编译器的类路径从Kotlin版本1.1.3-2开始,kotlinc不会添加tools.jar到编译器的类路径中.tools.jar是必需的kapt.
作为解决方法,您可以修补kotlinc.
vim $KOTLIN_HOME/bin/kotlinc
Run Code Online (Sandbox Code Playgroud)
编辑第79行.
从:
kotlin_app=("${KOTLIN_HOME}/lib/kotlin-preloader.jar" "org.jetbrains.kotlin.preloading.Preloader" "-cp" "${KOTLIN_HOME}/lib/kotlin-compiler.jar" $KOTLIN_COMPILER)
Run Code Online (Sandbox Code Playgroud)
至:
kotlin_app=("${KOTLIN_HOME}/lib/kotlin-preloader.jar" "org.jetbrains.kotlin.preloading.Preloader" "-cp" "${KOTLIN_HOME}/lib/kotlin-compiler.jar:$JAVA_HOME/lib/tools.jar" $KOTLIN_COMPILER)
Run Code Online (Sandbox Code Playgroud)
注意:$JAVA_HOME必须指向JDK,而不是JRE.
注意:这是一个黑客.
kotlinc使用正确的参数调用kotlinc -cp $MY_CLASSPATH \
-Xplugin=$KOTLIN_HOME/lib/kotlin-annotation-processing.jar -P \
plugin:org.jetbrains.kotlin.kapt3:aptMode=aptAndStubs,\
plugin:org.jetbrains.kotlin.kapt3:apclasspath=/path/to/SomeAnnotationProcessor.jar,\
plugin:org.jetbrains.kotlin.kapt3:sources=./sources,\
plugin:org.jetbrains.kotlin.kapt3:classes=./classes,\
plugin:org.jetbrains.kotlin.kapt3:stubs=./stubs \
/path/to/MyKotlinFile.kt
Run Code Online (Sandbox Code Playgroud)
更换:
$MY_CLASSPATH 与您期望的类路径/path/to/SomeAnnotationProcessor.jar 与一些注释处理器的实际路径./sources,./classes并./stubs使用路径执行应存储相应中间工件的目录/path/to/MyKotlinFile.kt 与您要编译的Kotlin文件的路径$KOTLIN_HOME带有Kotlin安装目录的路径(你的env中应该有这个)注意:-X参数(高级选项)是非标准的,可能会更改或删除,恕不另行通知
注意:kapt的界面没有记录.您可以查看源代码:https://github.com/JetBrains/kotlin/blob/master/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt#L295
从运行这东西是逆向工程gradle build --debug中kotlin-examples/gradle/kotlin-dagger(https://github.com/JetBrains/kotlin-examples/tree/master/gradle/kotlin-dagger).
这只是一个起点.我还不确定一些事情.随意编辑这个答案.
感谢runningcode:https://github.com/facebook/buck/issues/956#issuecomment-309080611
如果不明显:这个东西很糟糕.JetBrains只是假设CLI无关紧要,他们使关键接口没有记录/保留供内部使用.
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |