All-open compiler plugin
Kotlin has classes and their members final
by default, which makes it inconvenient to use frameworks and libraries such as Spring AOP that require classes to be open
. The all-open
compiler plugin adapts Kotlin to the requirements of those frameworks and makes classes annotated with a specific annotation and their members open without the explicit open
keyword.
For instance, when you use Spring, you don't need all the classes to be open, but only classes annotated with specific annotations like @Configuration
or @Service
. The all-open
plugin allows you to specify such annotations.
Kotlin provides all-open
plugin support both for Gradle and Maven with the complete IDE integration.
Gradle
Add the plugin in your build.gradle(.kts)
file:
Then specify the list of annotations that will make classes open:
If the class (or any of its superclasses) is annotated with com.my.Annotation
, the class itself and all its members will become open.
It also works with meta-annotations:
MyFrameworkAnnotation
is annotated with the all-open meta-annotation com.my.Annotation
, so it becomes an all-open annotation as well.
Maven
Add the plugin in your pom.xml
file:
Please refer to the Gradle section for the detailed information about how all-open annotations work.
Spring support
If you use Spring, you can enable the kotlin-spring
compiler plugin instead of specifying Spring annotations manually. The kotlin-spring
is a wrapper on top of all-open
, and it behaves exactly the same way.
Add the spring
plugin in your build.gradle(.kts)
file:
In Maven, the spring
plugin is provided by the kotlin-maven-allopen
plugin dependency, so to enable it in your pom.xml
file:
The plugin specifies the following annotations:
Thanks to meta-annotations support, classes annotated with @Configuration
, @Controller
, @RestController
, @Service
or @Repository
are automatically opened since these annotations are meta-annotated with @Component
.
Of course, you can use both kotlin-allopen
and kotlin-spring
in the same project.
Command-line compiler
All-open compiler plugin JAR is available in the binary distribution of the Kotlin compiler. You can attach the plugin by providing the path to its JAR file using the -Xplugin
kotlinc option:
You can specify all-open annotations directly, using the annotation
plugin option, or enable the preset:
Presets that available for the all-open
plugin are: spring
, micronaut
, and quarkus
.