kotlin-maven-plugin简单介绍,noarg,allopen

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
    ...
    </parent>

    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>demo</name>
    <description>demo for my csdn article</description>

    <dependencies>
        ...
    </dependencies>

    <build>
        <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
        <testSourceDirectory>src/test/kotlin</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <configuration>
                    <args>
                        <arg>-Xjsr305=strict</arg>
                    </args>
                    <compilerPlugins>
                        <plugin>spring</plugin>
                        <plugin>jpa</plugin>
                        <plugin>all-open</plugin>
                    </compilerPlugins>
                    <pluginOptions>
                        <option>all-open:annotation=javax.persistence.Entity</option>
                        <option>all-open:annotation=javax.persistence.Embeddable</option>
                        <option>all-open:annotation=javax.persistence.MappedSuperclass</option>
                    </pluginOptions>
                    <jvmTarget>1.8</jvmTarget>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-maven-allopen</artifactId>
                        <version>${kotlin.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-maven-noarg</artifactId>
                        <version>${kotlin.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

上面是比较常用的kotlin-maven-plugin配置。
首先可以看到-Xjsr305=strict配置。官方说法翻译如下:

尽管Java不支持在其类型系统中表示null安全,但是Spring Framework通过在org.springframework.lang包中声明的对工具友好的注释提供了整个Spring Framework API的空安全。默认情况下,在Kotlin中使用的Java API中的类型会被识别为放松了空检查的平台类型。 Kotlin对 JSR 305 annotations 的支持为Kotlin开发人员提供了整个Spring Framework API的null安全性,其优点是在编译时处理与null相关的问题。

接下来是spring插件,要说这个,我们要先看allopen插件。

关于allopen插件,因为kotlin中所有的类默认都是不可继承,spring框架的代理就不好使了。所以kotlin代码里会满满的open。这个插件可以省掉这些open,为指定注解注解的类在编译时添加open。可以在上面的示例配置文件中看到,指定了三个注解(Entity,Embeddable,MappedSuperclass)来将这些注解所注解的类默认open。

说回spring插件,这个其实就是已经指定一些spring常用注解来添加open。本质上也是依赖allopen插件的。该插件指定了以下注解: @Component、 @Async、 @Transactional、 @Cacheable 以及 @SpringBootTest。由于元注解的支持,标注有 @Configuration、 @Controller、 @RestController、 @Service 或者 @Repository 的类会自动打开,因为这些注解标注有元注解 @Component。

然后是jpa插件。与 kotlin-spring 插件类似,kotlin-jpa 是在 no-arg 之上的一层包装。该插件自动指定了 @Entity、 @Embeddable 与 @MappedSuperclass 这几个 无参 注解。

无参又是啥?无参(no-arg)编译器插件为具有特定注解的类生成一个额外的零参数构造函数。
这个生成的构造函数是合成的,因此不能从 Java 或 Kotlin 中直接调用,但可以使用反射调用。
这允许 Java Persistence API(JPA)实例化一个类,就算它从 Kotlin 或 Java 的角度看没有无参构造函数。

kotlin的最常用maven插件就是这样啦

你可能感兴趣的:(JPA,Spring,kotlin)