19-无参编译器插件
3.5.2 无参编译器插件
无参编译器插件可以为具有特定注解的类生成一个零参数构造函数。因为生成的构造函数是合成的,所以不能在Java或Kotlin代码中直接调用,但可以使用反射调用。
和全开放插件的集成方式一样,无参编译器插件也提供了Gradle和Maven两种IDE集成方式。
1.Gradle方式集成
Gradle方式集成的脚本配置如下。
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
}
}
apply plugin: "kotlin-noarg"
或者使用Gradle插件方式集成。
plugins {
id "org.jetbrains.kotlin.plugin.noarg" version "1.2.20"
}
使用时,在noArg标签下指定无参注解列表即可,如果希望在合成的构造函数中运行其初始化逻辑,需将invokeInitializers选项设置为true。
noArg {
annotation("com.my.Annotation")
invokeInitializers = true //合成函数中初始化
}
2.Maven方式集成
Maven方式集成无参编译器插件的脚本如下。
noArg {
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>no-arg</plugin>
</compilerPlugins>
<pluginOptions>
<option>no-arg:annotation=com.my.Annotation</option>
<!-- 在合成的构造函数中调用实例初始化器 -->
<!-- <option>no-arg:invokeInitializers=true</option> -->
</pluginOptions>
</configuration>
//…
</plugin>
3.JPA方式
与kotlin-spring插件类似,kotlin-jpa插件是对no-arg插件的进一步包装。目前,该插件支持@Entity、@Embeddable和@MappedSuperclass等无参注解,该插件的Gradle集成方式如下。
//kotlin-jpa插件
apply plugin: "kotlin-jpa"
//DSL方式
plugins {
id "org.jetbrains.kotlin.plugin.jpa" version "1.2.20"
}
在Maven项目中,则需要添加如下JPA插件配置。
<compilerPlugins>
<plugin>jpa</plugin>
</compilerPlugins>
4.在命令行中使用
与全开放编译插件类似,命令行中使用无参编译器插件的命令如下。
-Xplugin=$KOTLIN_HOME/lib/noarg-compiler-plugin.jar
-P plugin:org.jetbrains.kotlin.noarg:annotation=com.my.Annotation
-P plugin:org.jetbrains.kotlin.noarg:preset=jpa