dozer做什么的
Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象。通常,这些Java Bean将具有不同的复杂类型。
Dozer支持简单属性映射,复杂类型映射,双向映射,隐式显式映射以及递归映射。这包括映射还需要在元素级别进行映射的集合属性。
注意:dozer 目前不支持集合之间的转换 ,需要自己进行处理,稍后我会提供一个简单的工具类.`
问题描述
错误描述关键信息:
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
通过上图可以知道是jar包冲突导致的(slf4j-log4j12 和 logback-classic),理论上排查任意一个都可以;但是现有日志框架使用logback,如果排查,则控制台不会有日志输出,如下图:
那就排除 slf4j-log4j12 依赖吧
问题分析
- 看看 slf4j-log4j12 是怎么来的
在idea左侧依赖树,不能找到依赖
pom.xml 的 Dependency Analyzer 也找不到
通过在pom右键的依赖树也找不到,如下图
- Dockerfile配置
COPY app.jar /tms-***.jar
部署到测试环境后依然有 slf4j-log4j12 依赖
然后从Tone下载的jar包,解压后如下所示5. net.sf.dozer
在泰哥的帮助下,dozer是新增的依赖,怀疑是 dozer 引起。然后网上一阵搜索,底层确实依赖 slf4j-log4j12 - pom dozer依赖
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.4.0</version>
</dependency>
- dozer依赖
一般的依赖点开是这样
但 dozer 5.4.0 点开如下图
是这个版本打的有问题,从idea左侧依赖树,都可以看到正确dozer的pom依赖,如下图
问题解决
升级版本
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
升级后,目测没有 slf4j-log4j12 的依赖,如果有,排查即可
使用当前版本
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.4.0</version>
<exclusions>
<!--排除slf4j-log4j12-->
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
注意事项
官网在21年4月宣布停止维护,详见卧槽!Dozer 宣布停止维护,不要再用了。。,所以不建议使用