Official documentation指示如何使用Gradle和Maven中的kapt
。但是,如何通过kapt
从命令行使用kotlinc
呢?
最佳答案
将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。 注意:这是一个hack。
用正确的参数调用
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
执行应在其中存储各个中间 Artifact 的目录/path/to/MyKotlinFile.kt
,包含要编译的Kotlin文件的路径$KOTLIN_HOME
,带有Kotlin安装目录的路径(您应该已经在环境中包含了它)注意:-X参数(高级选项)是非标准的,可能会更改或删除,恕不另行通知。
注意:
kapt
的界面未记录。您可以检查源代码:https://github.com/JetBrains/kotlin/blob/master/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt#L295 这些东西是通过在
gradle build --debug
(https://github.com/JetBrains/kotlin-examples/tree/master/gradle/kotlin-dagger)中运行kotlin-examples/gradle/kotlin-dagger
进行反向工程的。这只是一个起点。我仍然不确定几件事。随时编辑此答案。
感谢
runningcode
:https://github.com/facebook/buck/issues/956#issuecomment-309080611如果不是很明显:这东西糟透了。 JetBrains只是假设CLI无关紧要,因此他们将关键接口(interface)设为未记录/仅供内部使用。