Как использовать капт из командной строки (с kotlinc)?
Официальная документация инструктирует, как использовать kapt
от Gradle и Maven. Но как я могу использовать kapt
из командной строки, с kotlinc
?
1 ответ
добавлять 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
с вашим желаемым classpath/path/to/SomeAnnotationProcessor.jar
с реальным путем к некоторому процессору аннотаций./sources
,./classes
а также./stubs
с путями делают каталоги, где должны храниться соответствующие промежуточные артефакты/path/to/MyKotlinFile.kt
с путем к файлам Kotlin, которые вы хотите скомпилировать- (по выбору)
$KOTLIN_HOME
с путем к каталогу установки Kotlin (у вас уже должно быть это в вашем 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).
Это только отправная точка. Я все еще не уверен в нескольких вещах. Не стесняйтесь редактировать этот ответ.
Благодаря runningcode
: https://github.com/facebook/buck/issues/956
Если это не было очевидно: этот материал отстой. JetBrains просто предположил, что CLI не имеет значения, и они сделали критически важные интерфейсы недокументированными / зарезервированными для внутреннего использования.