如何从命令行(使用kotlinc)使用kapt?
官方文档指导如何从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。
注意:这是一个黑客。
用正确的参数调用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
和./stubs
与路径做相应的中间工件应该被存储的目录 -
/path/to/MyKotlinFile.kt
带有要编译的Kotlin文件的路径 - (可选)带有Kotlin安装目录路径的
$KOTLIN_HOME
(你应该已经在你的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 )中kotlin-examples/gradle/kotlin-dagger
。
这只是一个起点。 我仍然不确定一些事情。 随意编辑这个答案。
感谢运行runningcode
: https : //github.com/facebook/buck/issues/956#issuecomment-309080611
如果不是很明显:这东西很糟糕。 JetBrains只是假定CLI并不重要,他们使关键的接口未被记录/保留供内部使用。