Spec-Zone.ru › Kotlin 1.8

Плагин компилятора all-open

Kotlin по умолчанию имеет классы и их члены final, что затрудняет использование фреймворков и библиотек, таких как Spring AOP, которые требуют, чтобы классы были open. Плагин компилятора all-open адаптирует Kotlin к требованиям этих фреймворков и делает классы, помеченные определённой аннотацией, и их члены открытыми без явного open ключевого слова.

Например, при использовании Spring, вам не нужно, чтобы все классы были открытыми, а только классы, помеченные определёнными аннотациями, такими как @Configuration или @Service. All-open позволяет указать такие аннотации.

Мы предоставляем поддержку плагина all-open как для Gradle, так и для Maven с полной интеграцией в IDE.

Для Spring вы можете использовать плагин компилятора kotlin-spring (см. ниже).

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.8.0"
}

Затем укажите список аннотаций, которые сделают классы открытыми:

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"

Или используя DSL плагинов Gradle:

plugins {
  id "org.jetbrains.kotlin.plugin.spring" version "1.8.0"
}

В 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>

Плагин определяет следующие аннотации:

  • @Component

  • @Async

  • @Transactional

  • @Cacheable

  • @SpringBootTest

Благодаря поддержке мета-аннотаций, классы, помеченные аннотациями @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
Последнее изменение: 10 января 2023
Опции компилятора Kotlin Плагин компилятора no-arg

© 2010–2023 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API