如何在Android项目中使用Arrow Meta



我试图根据示例代码,用Arrow Meta为Android应用程序创建一个简单的编译器插件。问题是使用XPlugin参数失败,出现编译错误

kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs = ["-Xplugin=${project.rootDir}/plugin/core/build/libs/core-all.jar"]
}
e: java.lang.NoSuchMethodError: org.jetbrains.kotlin.com.intellij.openapi.extensions.impl.ExtensionsAreaImpl.getExtensionPoints()[Lorg/jetbrains/kotlin/com/intellij/openapi/extensions/impl/ExtensionPointImpl;

在过去的几周里,我一直在尝试在Android项目中使用arrow meta,幸运的是,在arrow社区的帮助下,我可以使其发挥作用。

在这里,你会发现一个关于如何在android项目中集成箭头元的讨论。

这里有一个指向repo的链接,我在这里使用箭头元。这是基于arrow社区发布的最新示例。

基本上,你需要做的是创建你的插件,需要注意的是文件夹"create-plugin/src/main/resources/META-INF/services/";。在那里你必须创建一个名为";org.jetbrains.cotlin.compiler.plugin.ComponentRegistrar";你需要在哪里声明你的插件。

在我的回购中关注此链接。

然后你需要在你的应用程序中写下一行:build.grradle

android {
kotlinOptions {
jvmTarget = '1.8'
freeCompilerArgs += "-Xplugin=${project.rootDir}/create-plugin/build/libs/create-plugin-all.jar"
}
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
compileTask -> compileTask.dependsOn ":create-plugin:createNewPlugin"
}

然后在创建pluing:build.gradle中添加下一行:

import java.nio.file.Paths
dependencies {
compileOnly "org.jetbrains.kotlin:kotlin-stdlib:1.4.10"
compileOnly "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlin_version"
compileOnly "io.arrow-kt:compiler-plugin:1.4.10-SNAPSHOT"
}
// Create a new JAR with: Arrow Meta + new plugin
task createNewPlugin(type: Jar, dependsOn: classes) {
archiveClassifier = "all"
from 'build/classes/kotlin/main'
from 'build/resources/main'
from (
zipTree(sourceSets.main.compileClasspath.find {
it.absolutePath.contains(Paths.get("io.arrow-kt","compiler-plugin").toString())
})
) {
exclude 'META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar'
}
}

需要注意的是,kotlin版本和arrow-meta版本是连接的。

我使用kotlin版本1.4.10和arrow编译器插件版本1.4.10-SNAPSHOT

最新更新