Lombok SLF4J подразумевает проблемы наследования - PullRequest
0 голосов
/ 28 мая 2019

У меня проблема с Lombok в моем многомодульном проекте maven. У меня есть два класса:

@Slf4j
public class Parent {}

@Slf4j
public class Child extends Parent {
    public void m() {
        log.debug("hello");
    }
}

Существует также родительский проект maven, в котором определена зависимость lombok. И дочерний maven проект, в котором я определяю родительский проект как maven parent.

Когда я использую сгенерированный экземпляр log в классе Child, возникает ошибка компиляции:

[ERROR] log has private access in <Child class>

Я мог бы решить проблему двумя способами:

  • Я создаю себе личное поле с именем «log» вручную.
  • Я определяю зависимость Lombok в проекте child maven.

Почему так? Любой обходной путь / лучший способ определить зависимость lombok?

Спасибо за вашу помощь.

Использование:

  • ломбок 1.16.18
  • JDK 1,8
  • Maven 3.5.3

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Наследование никоим образом не должно влиять на вашу проблему. При использовании аннотации @Slf4j Lombok создает поле private static final, а поля static не наследуются. В вашем случае сгенерированный код выглядит так:

public class Parent {
    private static final Logger log = LoggerFactory.getLogger(Parent.class);

    public Parent() {}
}

public class Child extends Parent {
    private static final Logger log = LoggerFactory.getLogger(Child.class);

    public Child() {}

    public void m() {
        log.debug("hello");
    }
}

В многомодульном проекте maven необходимо убедиться, что межмодульные зависимости заданы правильно. Если lombok находится на пути к классам, все должно работать безупречно из коробки.

0 голосов
/ 29 мая 2019

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

...