如何从Kotlin AllOpen插件中排除注释?

时间:2019-06-11 06:10:39

标签: kotlin axon kotlin-maven-plugin

我正在使用Axon Framework,可以在其中用@Aggregate注释 domain 类(该类通过Spring的@Component进行元注释)。然后,我必须为自己拥有的每个私有方法/字段都道歉,方法是将它们显式标记为final

对于我来说,我只是将类标记为打开是很好的,所以我想在@Aggregate插件中排除spring的同时手动进行操作,但是我找不到方法这样做。

1 个答案:

答案 0 :(得分:1)

解决方法

根据documentationspring插件仅在支持元注释的同时通过列出Spring注释在内部使用了all-open。因此,我们正是这样做的,但是我们没有指定列表@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>