-
Notifications
You must be signed in to change notification settings - Fork 8
How to use a Kotlin Compiler Plugin from Gradle Plugin
Jens Klingenberg edited this page Apr 20, 2022
·
2 revisions
- You can find example code here: Gradle Plugin
- Create a usual Kotlin-Jvm project
- Add dependencies:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
compile "org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.3.50"
compileOnly "com.google.auto.service:auto-service:1.0-rc6"
kapt "com.google.auto.service:auto-service:1.0-rc6"
}
- Apply the plugins
apply plugin: "java-gradle-plugin"
apply plugin: "kotlin-kapt"
apply plugin: "maven"Create a class which implements org.gradle.api.Plugin
open class MpAptGradlePlugin : org.gradle.api.Plugin<Project> {
override fun apply(project: Project) {
//You don't need to do something here
}
}Create a class which implements KotlinGradleSubplugin
@AutoService(KotlinGradleSubplugin::class) // don't forget!
class MpAptGradleSubplugin : KotlinGradleSubplugin<AbstractCompile> {
...
} override fun apply(...) : List<SubpluginOption>You can return an emptyList() here
override fun isApplicable(project: Project, task: AbstractCompile) =
project.plugins.hasPlugin(MpAptGradlePlugin::class.java)Here you decide when your plugin is applicable.
override fun getCompilerPluginId(): String = "MpAptPlugin"If you want to pass command line arguments to your compiler plugin the pluginid needs to match with the pluginId in your CommandLineProcessor
override fun getPluginArtifact(): SubpluginArtifact = SubpluginArtifact(
groupId = "de.jensklingenberg",
artifactId = "kotlin-compiler-plugin",
version = "0.0.1" // remember to bump this version before any release!
)Here you need to set the correct values of the compiler plugin that you want to start. You can only start compiler plugins for Kotlin JS/JVM here
override fun getNativeCompilerPluginArtifact() = SubpluginArtifact(
groupId = "de.jensklingenberg",
artifactId = "kotlin-compiler-native-plugin",
version = "0.0.1" // remember to bump this version before any release!
)the same as above, but here you can only set Kotlin Native Plugins
- Add configuration to your build.gradle
group = "de.jensklingenberg"
archivesBaseName = "mpapt-gradle"
version = "1.0.0"
install {
repositories.mavenInstaller {
pom.artifactId = archivesBaseName
}
}
gradlePlugin {
plugins {
simplePlugin {
id = "de.jensklingenberg.mpapt" // users will do `apply plugin: "de.jensklingenberg.mpapt"`
implementationClass = "de.jensklingenberg.mpapt.MpAptGradlePlugin" // entry-point class
}
}
}- Use the install task to create the plugin