У меня есть проект Kotlin Gradle. Я добавил Lombok в качестве зависимости, а также зарегистрировал его с помощью kapt

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

Я хотел бы использовать только @Slf4j аннотацию для автоматической генерации log. Это работает для классов Java, но не для классов Kotlin.

Возможно ли совместное использование Kotlin и Lombok сейчас?

РЕДАКТИРОВАТЬ: Добавление более подробной информации

Если я аннотирую класс Kotlin с @Slf4j и использую log внутри него, я получаю

Неразрешенная ссылка: журнал

Очевидно, обработка аннотаций не применяется.

31
ps-aux 3 Сен 2017 в 23:06

6 ответов

Лучший ответ

Вы не можете использовать аннотацию @Slf4j, но вручную создайте ее объект в требуемом классе.

См. https://www.reddit.com/r/Kotlin/comments/8gbiul / slf4j_loggers_in_3_ways /

6
Sahil Chhabra 23 Ноя 2018 в 03:27

Если все, что вы хотите использовать для Lombok, это @ Slf4j, то я бы предложил вместо этого использовать kotlin-logging: https : //github.com/MicroUtils/kotlin-logging

2
YetAnotherMatt 30 Сен 2018 в 15:12

Для регистрации лучшее, что я мог сделать - потому что @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")
    }
}
0
pirho 14 Дек 2019 в 12:55

Я не вижу, как это будет работать без дополнительной поддержки со стороны команды lombok. Lombok основан на обработке аннотаций, поэтому он работает во время компиляции и работает с вашим исходным кодом, поэтому я предполагаю, что он предполагает синтаксис Java.

-2
Eyal 3 Сен 2017 в 21:17

Lombok работает не на вашем исходном коде, а на AST. В любом случае, это процессор аннотаций, который запускается компилятором Java во время компиляции. Компилятор Kotlin не использует эти процессоры аннотаций. См. Также ответ https://stackoverflow.com/a/35530223/2621917 прямо изо рта лошади.

12
Michael Piefel 3 Ноя 2017 в 15:10

Это не поддерживается, и, судя по всему, это не будет,

1
Michael 3 Ноя 2017 в 15:15