Как использовать капт из командной строки (с 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 не имеет значения, и они сделали критически важные интерфейсы недокументированными / зарезервированными для внутреннего использования.

Другие вопросы по тегам