18-全开放编译插件
3.5.1 全开放编译插件
Kotlin的默认类和方法都是final的,使用诸如Spring AOP这样的第三方框架的时候,直接为类添加open属性并不是很方便,all-open编译器插件则可以满足框架的这些需求。例如,使用Spring框架时,如果不需要编译所有的类,那么只需要使用特定的注解在需要开放编译的地方添加标注即可。
要想在项目中使用这些特殊的注解标注,首先必须配置all-open编译器插件环境,全开放编译插件提供Gradle和Maven两种IDE集成方式。
1.Gradle方式集成
Gradle方式集成的脚本配置如下。
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
}
}
apply plugin: "kotlin-allopen"
还可以使用plugins块方式集成。
plugins {
id "org.jetbrains.kotlin.plugin.allopen" version "1.2.20"
}
然后,再将需要开放的类添加到allOpen脚本配置中。代码如下。
allOpen {
annotation("com.my.Annotation")
…
}
此时,如果类或者超类使用com.my.Annotation注解,那么该类及其所有的成员将变为开放。
2.Maven方式集成
Maven是Apache组织下一个跨平台的项目管理工具,主要用来实现项目的构建、测试、打包和部署。Maven集成全开放的脚本配置如下。
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>all-open</plugin>
</compilerPlugins>
<pluginOptions>
<!-- 每个注解都放在其相应的行上 -->
<option>all-open:annotation=com.my.Annotation</option>
<option>all-open:annotation=com.their.AnotherAnnotation</option>
</pluginOptions>
</configuration>
//…
</plugin>
3.命令行中使用all-open插件
除了IDE集成方式,全开放编译器插件还提供JAR包方式依赖。如果采用命令方式编译Kotlin项目,则可以使用kotlinc命令的Xplugin选项来提供该JAR文件的路径。
-Xplugin=$KOTLIN_HOME/lib/allopen-compiler-plugin.jar
然后,使用annotation插件或者启用“预设”来直接指定需要全开放注解的范围。当前,能提供全开放的唯一预设是spring。
-P plugin:org.jetbrains.kotlin.allopen:annotation=com.my.Annotation
-P plugin:org.jetbrains.kotlin.allopen:preset=spring