Плагин компилятора all-open
В Kotlin классы и их члены по умолчанию final, что затрудняет использование фреймворков и библиотек, таких как Spring AOP, которым требуются open классы. Плагин компилятора all-open адаптирует Kotlin к требованиям таких фреймворков и делает классы, аннотированные определенной аннотацией, и их члены открытыми без явного указания ключевого слова open.
Например, при использовании Spring не нужно открывать все классы — достаточно открыть классы, аннотированные такими аннотациями, как @Configuration или @Service. Плагин all-open позволяет указать такие аннотации.
Kotlin предоставляет поддержку плагина all-open для Gradle и Maven с полноценной интеграцией в IDE.
Gradle
Добавьте плагин в файл build.gradle(.kts):
plugins {
kotlin("plugin.allopen") version "2.4.20"
}
plugins {
id "org.jetbrains.kotlin.plugin.allopen" version "2.4.20"
}
Затем укажите список аннотаций, при наличии которых классы будут открытыми:
allOpen {
annotation("com.my.Annotation")
// annotations("com.another.Annotation", "com.third.Annotation")
}
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
Добавьте плагин в файл pom.xml:
<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>
Подробную информацию о работе аннотаций all-open см. в разделе о Gradle.
Поддержка Spring
Если вы используете Spring, можно включить плагин компилятора kotlin-spring вместо того, чтобы указывать аннотации Spring вручную. kotlin-spring — это оболочка над all-open, которая работает точно так же.
Добавьте плагин spring в файл build.gradle(.kts):
plugins {
id("org.jetbrains.kotlin.plugin.spring") version "2.4.20"
}
plugins {
id "org.jetbrains.kotlin.plugin.spring" version "2.4.20"
}
В Maven плагин spring предоставляется зависимостью от плагина kotlin-maven-allopen. Чтобы включить его, добавьте в файл pom.xml:
<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.
Компилятор командной строки
JAR-файл плагина компилятора all-open входит в бинарный дистрибутив компилятора Kotlin. Подключить плагин можно, указав путь к его JAR-файлу с помощью параметра kotlinc -Xplugin:
-Xplugin=$KOTLIN_HOME/lib/allopen-compiler-plugin.jar
Можно указать аннотации all-open напрямую с помощью параметра плагина annotation или включить предустановку:
# 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
Для плагина all-open доступны следующие предустановки: spring, micronaut и quarkus.
© 2010–2026 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