如何从命令行(使用 kotlinc)使用 kapt?
How to use kapt from command line (with kotlinc)?
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
带有路径的目录应存储相应的中间工件
/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
这些东西是在 kotlin-examples/gradle/kotlin-dagger
(https://github.com/JetBrains/kotlin-examples/tree/master/gradle/kotlin-dagger) 中从 运行 gradle build --debug
逆向工程得到的。
这只是一个起点。我仍然不确定一些事情。请随时编辑此答案。
感谢runningcode
:https://github.com/facebook/buck/issues/956#issuecomment-309080611
如果不是很明显:这东西糟透了。 JetBrains 只是假设 CLI 无关紧要,他们将关键接口设为未记录/保留供内部使用。
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
带有路径的目录应存储相应的中间工件/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
这些东西是在 kotlin-examples/gradle/kotlin-dagger
(https://github.com/JetBrains/kotlin-examples/tree/master/gradle/kotlin-dagger) 中从 运行 gradle build --debug
逆向工程得到的。
这只是一个起点。我仍然不确定一些事情。请随时编辑此答案。
感谢runningcode
:https://github.com/facebook/buck/issues/956#issuecomment-309080611
如果不是很明显:这东西糟透了。 JetBrains 只是假设 CLI 无关紧要,他们将关键接口设为未记录/保留供内部使用。