Ответ 1
ИЗМЕНИТЬ
Если я использую Java и Kotlin (1.2) в своем проекте, все равно необходимо добавить
Нет. В версии 1.0.4 представлена новая экспериментальная реализация API обработки аннотаций. Теперь нет необходимости настраивать этот generateStubs
в build.gradle
.
Добавьте следующее в свой build.gradle
, если вы хотите его включить:
apply plugin: 'kotlin-kapt'
Вам также придется удалить конфигурацию generateStubs
из build.gradle
Но как ваш вопрос о деталях на generateStubs
, я сохраняю свой старый пост как есть.
Использование:
Используя kapt
с: generatestubs = true
, чтобы использовать библиотеки, такие как dagger 2 или dbflow, это позволит компилятору генерировать классы-заглушки, необходимые для взаимодействия между Java и Kotlin. Если generatestubs = true
не включен, "bootstrap
" (пользовательский обработчик аннотации, который передается в javac
, загружает данные аннотации и вызывает другие обработчики аннотаций.) Java-код необходим для ссылки на сгенерированные источники .pulled, что из
Примечание. Сгенерированные коды всегда находятся в Java
не в Kotlin
.
Генерация заглушек требует относительно большой работы, потому что все объявления должны быть разрешены, и иногда знание возвращаемых типов требует анализа выражения (тела функций или инициализаторы свойств после знака =
). Таким образом, использование заглушек в kapt
несколько замедляет ваше построение. Вот почему по умолчанию отключены заглушки, и для их включения вам нужно написать следующее в файле build.gradle
:
kapt {
generateStubs = true
}
Как это работает:
Штыри, созданные компилятором промежуточные классы, позволяют ссылаться на "сгенерированные" источники из Kotlin, иначе компилятор не сможет ссылаться на недостающие источники.
Сгенерированный источник создается в "build/generated/source/kapt/main"
, так как он находится под " build
", который обычно исключается из источников проекта IntelliJ, этот исходный корень будет помечен в самой сборке script.
sourceSets {
main.java.srcDirs += [file("$buildDir/generated/source/kapt/main")]
}
Пример:
Пример Dagger2 с поддержкой обработчика аннотаций Kotlin (1.1.50) Gradle build