首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从命令行使用kapt (与kotlinc一起使用)?

如何从命令行使用kapt (与kotlinc一起使用)?
EN

Stack Overflow用户
提问于 2017-07-20 14:19:03
回答 1查看 1.5K关注 0票数 7

正式文件指导如何使用Gradle和Maven中的kapt。但是如何使用命令行中的kaptkotlinc

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-20 14:52:40

tools.jar添加到Kotlin编译器的类路径

在Kotlin版本1.1.3-2中,kotlinc没有将tools.jar添加到编译器的类路径中。tools.jarkapt的要求。

作为一种解决方法,您可以修补kotlinc

代码语言:javascript
复制
vim $KOTLIN_HOME/bin/kotlinc

编辑第79行。

发自:

代码语言:javascript
复制
kotlin_app=("${KOTLIN_HOME}/lib/kotlin-preloader.jar" "org.jetbrains.kotlin.preloading.Preloader" "-cp" "${KOTLIN_HOME}/lib/kotlin-compiler.jar" $KOTLIN_COMPILER)

至:

代码语言:javascript
复制
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

代码语言:javascript
复制
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可以在目录中存储相应的中间构件
  • 具有要编译的Kotlin文件的路径的/path/to/MyKotlinFile.kt
  • (可选)带有指向Kotlin安装目录的路径的$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)逆向工程而来的。

这只是一个起点。我还是不确定有几件事。请随意编辑这个答案。

感谢runningcodehttps://github.com/facebook/buck/issues/956#issuecomment-309080611

如果不是显而易见的话:这东西糟透了。JetBrains只是假定CLI并不重要,他们将关键的接口没有文档化/保留给内部使用。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45217399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档