Как исключить аннотацию из плагина Kotlin AllOpen?
Я использую Axon Framework, где я могу аннотировать свои доменные классы с @Aggregate
(который мета-аннотирован @Component из Spring). Затем я должен извиниться за каждый свой частный метод / поле, пометив их final
в явном виде.
Я думаю, что в моем случае я просто отмечаю открытый класс, поэтому я хотел бы сделать это вручную, исключая @Aggregate
из spring
плагин, но я не могу найти способ сделать это.
1 ответ
обходной путь
Согласно документации, 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://stackru.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>