在我的Kotlin项目中配置AspectJ时遇到了问题.我正在使用FreeFair插件,但它似乎不起作用.我开始申请时没有任何问题,但没有考虑到这些方面.

我将方面放在文件MetricAspect.kt中的src/main/AspectJ源目录中

我现在拥有的是一个gradle.Build.kts文件,如下所示:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile


plugins {
    //other plugins

    id("io.freefair.aspectj") version "6.6.3"

    val kotlinVersion = "1.7.21"
    kotlin("jvm") version kotlinVersion
    kotlin("plugin.spring") version kotlinVersion

    //other plugins
}


allprojects {
    apply(plugin = "org.jetbrains.kotlin.jvm")
    apply(plugin = "io.gitlab.arturbosch.detekt")
    apply(plugin = "com.diffplug.spotless")
    apply(plugin = "io.freefair.aspectj")
    apply(plugin = "kotlin-spring")
    version = "1.0.0-SNAPSHOT"

    java {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    

    repositories {
        maven {
            url = uri("https://private.repo/public-maven-virtual/")
            credentials {
                username = user
                password = password
            }
        }
    }

    dependencies {

        kotlinCompilerPluginClasspath("gradle.plugin.aspectj:gradle-aspectj:0.1.6")
        
        //other deps

        implementation("org.aspectj:aspectjrt:1.9.7")
        annotationProcessor("org.aspectj:aspectjtools:1.9.7")

        //other deps
    }

    tasks.withType<KotlinCompile> {
        kotlinOptions {
            freeCompilerArgs = listOf("-Xjsr305=strict")
            jvmTarget = "17"
        }
    }

    tasks.withType<Test> {
        useJUnitPlatform()
    }

    spotless {
        //....
    }

    detekt {
        buildUponDefaultConfig = true // preconfigure defaults
        allRules = false // activate all available (even unstable) rules.
        parallel = true
        config = files("$rootDir/detekt.yml")
    }
}

tasks {
    bootJar {
        enabled = false
    }
}

关于它的文档非常稀少,每个人似乎都有自己的一种方法来配置这个插件,这很奇怪.有什么官方方法可以做到这一点吗?

推荐答案

编译器只理解基于注释的Java语法和原生的编译器语法.如果你想使用其他JVM语言,比如Kotlin,你需要使用post-compile weaving.Freefair对此有一个 Select .如果您在运行该项目时遇到问题,请随时提供MCVE项目并提出后续问题.

Kotlin相关问答推荐

判断字符串是否除了.&" ",","@""""

如何避免使用公共类实现内部接口

在Kotlin项目中使用Free Fair AspectJ插件(使用Gradle)

kotlin中如何使用子类调用父静态方法?

为什么 Kotlin main 函数需要 @JVMStatic 注解?

为什么 Kotlin 在将协变类型参数转换为不变类型参数时会产生 Unchecked Cast 警告?

Rabin-Karp字符串匹配的实现(Rolling hash)

为什么 trySend 会发出假数据?

Kotlin - 协程未按预期执行

Kotlin 中的密封和内部有什么区别?

在 Kotlin 中通过反射获取 Enum 值

在粘贴时将 java 转换为 kotlin

Kotlin 创建snackbar

片段内的 Kotlin 按钮 onClickListener 事件

Kotlin中的测试无法访问受保护(protected)的方法

kotlin RecyclerView分页

Kotlin 的数据类 == C# 的 struct ?

如何修复未解析的参考生命周期范围?

Android Compose 生产准备好了吗?

如何判断数据是否插入到房间数据库中