Как исключить аннотацию из плагина Kotlin AllOpen? - PullRequest
2 голосов
/ 11 июня 2019

Я использую Axon Framework, где я могу аннотировать свой домен классов с помощью @Aggregate (что мета-аннотировано с помощью @Component из Spring).Затем я должен извиниться за каждый свой частный метод / поле, отмечая их final явно.

Я думаю, что в моем случае я просто отмечу открытый класс, поэтому я хотел бы сделать это вручную, исключая @Aggregate из плагина spring, но я не могу найти способ сделатьпоэтому.

1 Ответ

1 голос
/ 11 июня 2019

Обойти

Согласно документации , плагин spring использует all-open под капотом, просто перечисляя аннотации Spring, поддерживая мета-аннотирование. Итак, мы делаем именно это, но мы не указываем список @Component, поэтому в нашем коде мы должны использовать стереотипы (репозиторий, сервис и т. Д.). Таким образом, он не поднимает @Aggregate:

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <configuration>
        <compilerPlugins>
            <!-- instead of 'spring' -->
            <plugin>all-open</plugin>
        </compilerPlugins>
        <pluginOptions>
            <!-- todo check up on https://stackoverflow.com/questions/56537496 -->
            <!-- listing all spring annotations except @Component -->
            <option>all-open:annotation=org.springframework.stereotype.Service</option>
            <option>all-open:annotation=org.springframework.stereotype.Controller</option>
            <option>all-open:annotation=org.springframework.data.repository.Repository</option>
            <option>all-open:annotation=org.springframework.context.annotation.Configuration</option>
            <option>all-open:annotation=org.springframework.boot.test.context.SpringBootTest</option>
            <option>all-open:annotation=org.springframework.cache.annotation.Cacheable</option>
            <option>all-open:annotation=org.springframework.transaction.annotation.Transactional</option>
            <option>all-open:annotation=org.springframework.scheduling.annotation.Async</option>
        </pluginOptions>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-allopen</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
    </dependencies>
</plugin>
...