Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lombok SLF4J impl继承问题_Java_Maven_Slf4j_Lombok - Fatal编程技术网

Java Lombok SLF4J impl继承问题

Java Lombok SLF4J impl继承问题,java,maven,slf4j,lombok,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父项目 在Child类中使用生成的log实

在我的多模块maven项目中,我面临一个与Lombok有关的问题。我有两门课:

@Slf4j
public class Parent {}

@Slf4j
public class Child extends Parent {
    public void m() {
        log.debug("hello");
    }
}
还有一个父maven项目,其中定义了lombok依赖项。还有一个子maven项目,其中我将父项目定义为maven父项目

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

[ERROR] log has private access in <Child class>
[ERROR]日志在中具有私有访问权限
我可以通过两种方式解决这个问题:

  • 我手工创建了名为“log”的私有字段
  • 我在child maven项目中定义了Lombok依赖项
为什么会这样?定义lombok依赖项的任何变通方法/最佳方法

谢谢你的帮助

使用:

  • 龙目岛1.16.18
  • JDK1.8
  • Maven 3.5.3

  • 继承不应以任何方式影响您的问题。使用
    @Slf4j
    注释时,Lombok会创建
    私有静态最终
    字段,而
    静态
    字段不会被继承。在您的情况下,生成的代码如下所示:

    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在类路径上,那么一切都应该在开箱即用的情况下正常工作。

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

    Lombok应始终添加为
    提供的
    ,否则它将在运行时类路径中结束,您不希望这样。