是否可以将 Lombok 与 Kotlin 一起使用?
Is it possible to use Lombok with Kotlin?
我有一个 Kotlin Gradle 项目。我将 Lombok 添加为依赖项,并使用 kapt
注册了它
compileOnly("org.projectlombok:lombok:$lombokVersion")
kapt("org.projectlombok:lombok:$lombokVersion")
我只想使用 @Slf4j
注释来自动 log
生成。它适用于 Java 类 但不适用于 Kotlin 的。
现在是否可以同时使用 Kotling 和 Lombok?
编辑:添加更多详细信息
如果我用 @Slf4j
注释 Kotlin 类并在其中使用 log
我得到
Unresolved reference: log
显然没有应用注释处理。
如果没有 lombok 团队的额外支持,我不知道它会如何工作。
Lombok 基于注解处理,因此它在编译时运行并在您的源代码上运行,所以我猜它采用了 Java 的语法。
Lombok 不 运行 在您的源代码上,而是在 AST 上。无论如何,它是 Java 编译器在编译时 运行 的注解处理器。 Kotlin 编译器不使用这些注解处理器。又见马嘴里的答案
它不受支持,从外观上看,it isn't going to be。
如果你想使用 Lombok 只是为了@Slf4j,那么我建议你改用 kotlin-logging:https://github.com/MicroUtils/kotlin-logging
您不能使用注解 @Slf4j
,但需要在 class 中手动创建其对象。
参考https://www.reddit.com/r/Kotlin/comments/8gbiul/slf4j_loggers_in_3_ways/
为了记录我能做的最好的 - 因为 @Slf4j
没有工作 - 就像创建抽象日志 class 比如:
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")
}
}
我有一个 Kotlin Gradle 项目。我将 Lombok 添加为依赖项,并使用 kapt
注册了它compileOnly("org.projectlombok:lombok:$lombokVersion")
kapt("org.projectlombok:lombok:$lombokVersion")
我只想使用 @Slf4j
注释来自动 log
生成。它适用于 Java 类 但不适用于 Kotlin 的。
现在是否可以同时使用 Kotling 和 Lombok?
编辑:添加更多详细信息
如果我用 @Slf4j
注释 Kotlin 类并在其中使用 log
我得到
Unresolved reference: log
显然没有应用注释处理。
如果没有 lombok 团队的额外支持,我不知道它会如何工作。 Lombok 基于注解处理,因此它在编译时运行并在您的源代码上运行,所以我猜它采用了 Java 的语法。
Lombok 不 运行 在您的源代码上,而是在 AST 上。无论如何,它是 Java 编译器在编译时 运行 的注解处理器。 Kotlin 编译器不使用这些注解处理器。又见马嘴里的答案
它不受支持,从外观上看,it isn't going to be。
如果你想使用 Lombok 只是为了@Slf4j,那么我建议你改用 kotlin-logging:https://github.com/MicroUtils/kotlin-logging
您不能使用注解 @Slf4j
,但需要在 class 中手动创建其对象。
参考https://www.reddit.com/r/Kotlin/comments/8gbiul/slf4j_loggers_in_3_ways/
为了记录我能做的最好的 - 因为 @Slf4j
没有工作 - 就像创建抽象日志 class 比如:
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")
}
}