是否可以将Lombok与Kotlin一起使用?

时间:2017-09-03 20:06:44

标签: java kotlin lombok annotation-processing

我有一个Kotlin Gradle项目。我添加了Lombok作为依赖项,并使用kapt

注册了它
compileOnly("org.projectlombok:lombok:$lombokVersion")
kapt("org.projectlombok:lombok:$lombokVersion")

我想仅使用@Slf4j anotation进行自动log生成。它适用于Java类,但不适用于Kotlin类。

到目前为止,甚至可以将Kotling和Lombok一起使用吗?

编辑:添加更多详细信息

如果我使用@Slf4j注释Kotlin类并在其中使用log,我会得到

  

未解决的参考:日志

显然没有应用注释处理。

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

它不受支持,而且从事物的外观来看,it isn't going to be

答案 2 :(得分:1)

您不能使用注释@Slf4j,而是在所需的类中手动创建其对象。

引用https://www.reddit.com/r/Kotlin/comments/8gbiul/slf4j_loggers_in_3_ways/

答案 3 :(得分:0)

如果您要使用Lombok的全部是@ Slf4j,那么我建议使用kotlin-logging代替:https://github.com/MicroUtils/kotlin-logging

答案 4 :(得分:0)

为记录日志,我能做的最好-因为@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")
    }
}

答案 5 :(得分:-1)

如果没有lombok团队的额外支持,我看不出它会如何运作。 Lombok基于注释处理,因此它在编译期间运行并在源代码上运行,因此我猜它假定Java的语法。