Cómo usar kapt desde la línea de command (con kotlinc)?

La documentation oficial indica cómo usar kapt de Gradle y Maven. Pero, ¿cómo puedo usar kapt desde la command-line, con kotlinc ?

    Agregue tools.jar al tools.jar de Kotlin comstackdores

    A partir de la versión 1.1.3-2 de Kotlin, kotlinc no agrega tools.jar al classpath del comstackdor. tools.jar es requerido por kapt .

    Como solución alternativa, puede parchear kotlinc .

     vim $KOTLIN_HOME/bin/kotlinc 

    Edite la línea 79.

    De:

     kotlin_app=("${KOTLIN_HOME}/lib/kotlin-preloader.jar" "org.jetbrains.kotlin.preloading.Preloader" "-cp" "${KOTLIN_HOME}/lib/kotlin-compiler.jar" $KOTLIN_COMPILER) 

    A:

     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) 

    Nota: $JAVA_HOME debe apuntar a JDK, no a JRE.

    Nota: Este es un truco.

    Invocar kotlinc con arguments correctos

     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 

    Reemplazar:

    • $MY_CLASSPATH con su classpath deseado
    • /path/to/SomeAnnotationProcessor.jar con la ruta real a algún procesador de anotación
    • ./sources , ./classes y ./stubs con routes hacen directorys donde se almacenan los artefactos intermedios respectivos
    • /path/to/MyKotlinFile.kt con ruta a los files de Kotlin que desea comstackr
    • (opcionalmente) $KOTLIN_HOME con la ruta al directory de installation de Kotlin (ya debe tener esto en su env)

    Nota: los arguments -X ( opciones avanzadas ) no son estándar y pueden cambiarse o eliminarse sin previo aviso.

    Nota: la interfaz de kapt no está documentada. Puede verificar el código fuente: https://github.com/JetBrains/kotlin/blob/master/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt#L295


    Este material se diseñó de forma inversa a partir de la ejecución de gradle build --debug en kotlin-examples/gradle/kotlin-dagger ( https://github.com/JetBrains/kotlin-examples/tree/master/gradle/kotlin-dagger ).

    Esto es sólo un punto de partida. Todavía no estoy seguro de algunas cosas. Siéntase libre de editar esta respuesta.

    Gracias a runningcode : https://github.com/facebook/buck/issues/956#issuecomment-309080611

    Si no fue obvio: esto es una mierda. JetBrains simplemente asumió que la CLI no importa y establecieron las interfaces cruciales no documentadas / reservadas para uso interno.