正式文件指导如何使用Gradle和Maven中的kapt。但是如何使用命令行中的kapt和kotlinc?
发布于 2017-07-20 14:52:40
将tools.jar添加到Kotlin编译器的类路径
在Kotlin版本1.1.3-2中,kotlinc没有将tools.jar添加到编译器的类路径中。tools.jar是kapt的要求。
作为一种解决方法,您可以修补kotlinc。
vim $KOTLIN_HOME/bin/kotlinc编辑第79行。
发自:
kotlin_app=("${KOTLIN_HOME}/lib/kotlin-preloader.jar" "org.jetbrains.kotlin.preloading.Preloader" "-cp" "${KOTLIN_HOME}/lib/kotlin-compiler.jar" $KOTLIN_COMPILER)至:
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)注意:$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取代:
$MY_CLASSPATH/path/to/SomeAnnotationProcessor.jar./sources、./classes和./stubs可以在目录中存储相应的中间构件/path/to/MyKotlinFile.kt$KOTLIN_HOME (您应该已经在您的env中使用了这个)注意:-X参数(advanced )是非标准的,可以更改或删除,而无需通知。
注意:kapt**'s接口是无文档的。您可以查看源代码: [https://github.com/JetBrains/kotlin/blob/master/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt#L295**](https://github.com/JetBrains/kotlin/blob/master/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt#L295)
这个东西是从运行gradle build --debug in 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并不重要,他们将关键的接口没有文档化/保留给内部使用。
https://stackoverflow.com/questions/45217399
复制相似问题