Плагин компилятора all-open
Kotlin имеет классы и их члены final по умолчанию, что затрудняет использование фреймворков и библиотек, таких как Spring AOP, которые требуют, чтобы классы были open. Плагин компилятора all-open адаптирует Kotlin к требованиям этих фреймворков и делает классы, аннотированные определенной аннотацией, и их члены открытыми без явного использования open ключевого слова.
Например, при использовании Spring вам не нужно, чтобы все классы были открытыми, а только классы, аннотированные конкретными аннотациями, такими как @Configuration или @Service. All-open позволяет указать такие аннотации.
Мы предоставляем поддержку плагина all-open как для Gradle, так и для Maven с полной интеграцией в IDE.
Gradle
Добавьте артефакт плагина в зависимости проекта и примените плагин:
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
}
}
apply plugin: "kotlin-allopen"
В качестве альтернативы, вы можете включить его, используя блок plugins.
plugins {
id "org.jetbrains.kotlin.plugin.allopen" version "1.6.20"
}
Затем укажите список аннотаций, которые сделают классы открытыми:
allOpen {
annotation("com.my.Annotation")
// annotations("com.another.Annotation", "com.third.Annotation")
}
Если класс (или любой из его суперклассов) аннотирован с помощью com.my.Annotation, то сам класс и все его члены станут открытыми.
Он также работает с мета-аннотациями:
@com.my.Annotation annotation class MyFrameworkAnnotation @MyFrameworkAnnotation class MyClass // will be all-open
MyFrameworkAnnotation аннотирован мета-аннотацией all-open com.my.Annotation, поэтому он также становится аннотацией all-open.
Maven
Вот как использовать all-open с Maven:
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<!-- Or "spring" for the Spring support -->
<plugin>all-open</plugin>
</compilerPlugins>
<pluginOptions>
<!-- Each annotation is placed on its own line -->
<option>all-open:annotation=com.my.Annotation</option>
<option>all-open:annotation=com.their.AnotherAnnotation</option>
</pluginOptions>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
Обратитесь к разделу Gradle за подробной информацией о работе аннотаций all-open.
Поддержка Spring
Если вы используете Spring, вы можете включить плагин компилятора kotlin-spring вместо ручного указания аннотаций Spring. kotlin-spring является обёрткой поверх all-open и работает точно так же.
Как и с all-open, добавьте плагин в зависимости проекта:
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
}
}
apply plugin: "kotlin-spring" // instead of "kotlin-allopen"
Или используя Gradle DSL для плагинов:
plugins {
id "org.jetbrains.kotlin.plugin.spring" version "1.6.20"
}
В Maven плагин spring предоставляется зависимостью плагина kotlin-maven-allopen, поэтому для его включения:
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
Плагин задаёт следующие аннотации:
Благодаря поддержке мета-аннотаций, классы, аннотированные @Configuration, @Controller, @RestController, @Service или @Repository автоматически открываются, так как эти аннотации мета-аннотированы @Component.
Конечно, вы можете использовать как kotlin-allopen, так и kotlin-spring в одном проекте.
Обратите внимание, что если вы используете шаблон проекта, сгенерированный сервисом start.spring.io, плагин kotlin-spring будет включён по умолчанию.
Компилятор командной строки
JAR-файл плагина компилятора all-open доступен в бинарном распределении компилятора Kotlin. Вы можете подключить плагин, указав путь к его JAR-файлу, используя параметр Xplugin kotlinc:
-Xplugin=$KOTLIN_HOME/lib/allopen-compiler-plugin.jar
Вы можете указать аннотации all-open напрямую, используя параметр плагина annotation, или включить «пресет». Доступные на данный момент пресеты для all-open — spring, micronaut, и quarkus.
# The plugin option format is: "-P plugin:<plugin id>:<key>=<value>". # Options can be repeated. -P plugin:org.jetbrains.kotlin.allopen:annotation=com.my.Annotation -P plugin:org.jetbrains.kotlin.allopen:preset=spring
© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/all-open-plugin.html