Lombok岛可以和Kotlin一起使用吗?

lztngnrs  于 2022-12-30  发布在  Kotlin
关注(0)|答案(8)|浏览(200)

我有一个Kotlin Gradle项目,我将Lombok添加为依赖项,并在kapt中注册了它

compileOnly("org.projectlombok:lombok:$lombokVersion")
kapt("org.projectlombok:lombok:$lombokVersion")

我想使用@Slf4j annotation来自动生成日志记录器。它适用于Java类,但不适用于Kotlin类。
现在一起使用Kotlin和Lombok是可能的吗?如果我用@Slf4j注解一个Kotlin类并在其中使用log,我得到
未解析的引用:原木
显然,没有应用注解处理。

wljmcqd8

wljmcqd81#

Lombok不是在源代码上运行的,而是在AST上运行的。无论如何,它是一个注解处理器,由Java编译器在编译时运行。Kotlin编译器不使用这些注解处理器。另请参见直接从马嘴里得到的答案https://stackoverflow.com/a/35530223/2621917

kdfy810k

kdfy810k2#

不能使用注解@Slf4j,而是在所需的类中手动创建其对象。
参考https://www.reddit.com/r/Kotlin/comments/8gbiul/slf4j_loggers_in_3_ways/

2o7dmzc5

2o7dmzc53#

如果您只想使用Lombok来实现@Slf4j,那么我建议您改用kotlin-logging:https://github.com/MicroUtils/kotlin-logging
它是slf 4j的一个简单 Package 器,因此不用@Slf4j注解类,而是用途:

// Place definition above class declaration to make field static
private val logger = KotlinLogging.logger {}
// ...

logger.debug { "A message only logged if debug is enabled. With $variable support." }
at0kjp5o

at0kjp5o4#

它不受支持,而且,从外观上看,it isn't going to be

mv1qrgav

mv1qrgav5#

从带有K2编译器的Kotlin1.7.20开始,这是可能的。
https://kotlinlang.org/docs/whatsnew1720.html#support-for-kotlin-k2-compiler-plugins

b09cbbtk

b09cbbtk6#

对于日志记录,我所能做的最好的事情--因为@Slf4j不起作用--就像创建抽象日志类一样:

package org.example

import org.slf4j.LoggerFactory
import org.slf4j.Logger

abstract class Log {
    val log: Logger = LoggerFactory.getLogger(this.javaClass)
}

和用途:

package org.example

class MyClass { 
    companion object : Log() {}
    @Test
    fun someFun() {
        log.info("Logging info")
    }
}
t3irkdon

t3irkdon7#

Lombok的构建器注解支持已于2022年12月下旬添加到kotlin 1.8中。
您可以在这里学习如何配置插件。
简而言之,添加

plugins {
    id 'org.jetbrains.kotlin.plugin.lombok' version '1.8.0'
    id 'io.freefair.lombok' version '5.3.0'
}

添加到您的Groovy/Gradle文件和/或take a look at the sample project

6bc51xsx

6bc51xsx8#

如果没有lombok团队的额外支持,我无法想象它会如何工作。Lombok基于注解处理,因此它在编译时运行,并在源代码上运行,所以我猜它采用了Java的语法。

相关问题