【问题标题】:Is it possible to use Lombok with Kotlin?是否可以将 Lombok 与 Kotlin 一起使用?
【发布时间】:2017-09-03 20:06:43
【问题描述】:

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

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

我只想使用 @Slf4j 注释来自动生成 log。它适用于 Java 类,但不适用于 Kotlin 类。

到目前为止,是否可以同时使用 Kotling 和 Lombok?

编辑:添加更多细节

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

未解决的参考:日志

显然没有应用注释处理。

【问题讨论】:

标签: java kotlin lombok annotation-processing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    参考https://www.reddit.com/r/Kotlin/comments/8gbiul/slf4j_loggers_in_3_ways/

    【讨论】:

      【解决方案3】:

      如果您只想使用 Lombok 来处理 @Slf4j,那么我建议您改用 kotlin-logging:https://github.com/MicroUtils/kotlin-logging

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          为了记录我能做的最好的事情 - 因为@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")
              }
          }
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • Lombok 不会直接在您的源代码上运行;相反,它利用了 Java 编译器对编译时注释处理器的内置支持。
            • 如果我没记错的话,Lombok 的一些高级功能实际上需要访问 Java 源代码。
            • AFAIK Lombok 在编译时运行。因此它可以访问您的源代码。它还使用一些技术来修改生成的 AST
            猜你喜欢
            • 2018-09-05
            • 1970-01-01
            • 1970-01-01
            • 2018-10-25
            • 1970-01-01
            • 1970-01-01
            • 2021-11-12
            • 2016-04-01
            • 2011-01-20
            相关资源
            最近更新 更多