龙目岛SLF4J隐含继承问题

时间:2019-05-28 08:29:30

标签: java maven slf4j lombok

我在多模块Maven项目中遇到Lombok的问题。我有两节课:

@Slf4j
public class Parent {}

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

还有一个父Maven项目,其中定义了lombok依赖项。还有一个子Maven项目,其中我将父项目定义为Maven父项。

当我在log类中使用生成的Child实例时,发生编译错误:

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

我可以通过两种方式解决该问题:

  • 我手动创建一个名为“ log”的私有字段。
  • 我在子maven项目中定义了Lombok依赖项。

为什么呢?有什么解决方法/定义lombok依赖项的最佳方法吗?

感谢您的帮助。

使用:

  • 龙目岛1.16.18
  • JDK 1.8
  • Maven 3.5.3

2 个答案:

答案 0 :(得分:1)

继承不会以任何方式影响您的问题。当您使用@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在类路径中,那么开箱即用就可以正常工作。

答案 1 :(得分:0)

我发现了为什么子项目的依赖项树中的Lombok依赖项在提供的范围内。我在依赖项中添加了Lombok,然后正确生成了该字段。