由于 Maven 的 SLF4J 模块加载错误,Hibernate 无法在 Wildfly 上序列化对象
Hibernate can't serialize object on Wildfly due to SLF4J Module load error with Maven
我是 J2EE 的新手,所以请多多关照...
我正在使用 Wildfly (JBOSS) 8.2.0.Final,我遇到了休眠问题。每次我尝试反序列化一个对象时,我都会从休眠中得到一个错误:
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.Slf4jLogger
from [Module "org.hibernate:main" from local module loader @4253c155
(finder: local module finder @8b9d578 (roots: C:\dev\wildfly-8.2.0.Final\modules,
C:\dev\wildfly-8.2.0.Final\modules\system\layers\base))]
据我了解 SLF4J 的狂野世界,wildfly 有一个自定义实现,正确的做法是从您的依赖项中排除对 org.slf4j 以外的任何内容的所有引用,并将 slf4j-api 包含在你的依赖。我可以确认我的 lib 文件夹中确实有 slf4j-api JAR,但我什至不知道如何开始调试它。请注意,应用程序的其他方面正在加载并正确记录,只有当我尝试反序列化 hibernate 尝试记录并失败并出现此异常的内容时。
以下是 pom 的一些摘录:
<!-- logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Dependencies>org.slf4j org.apache.xerces services</Dependencies>
<Class-Path>xxx-myproject-${project.version}.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
当前正在下载的slf4j与当前的Hibernate版本不匹配。您尝试将现有的 slf4j 依赖项替换为以下依赖项,或者在 maven 依赖项中提供特定版本。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
我也有类似的问题,但是修正的很不正常。
我有一个可序列化的 class。在 class 中,我使用的是记录器:
private Logger LOGGER = LoggerFactory.getLogger(MyClass.class);
但这 LOGGER
不是短暂的或静态的。因此,在运行时,错误 java.lang.ClassNotFoundException: org.slf4j.impl.Slf4jLogger
发生在我们的 class 对 serialize/unserialize 负责。所以我做了一点改动:
private static Logger logger = LoggerFactory.getLogger(MyClass.class);
问题解决了。
我是 J2EE 的新手,所以请多多关照...
我正在使用 Wildfly (JBOSS) 8.2.0.Final,我遇到了休眠问题。每次我尝试反序列化一个对象时,我都会从休眠中得到一个错误:
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.Slf4jLogger
from [Module "org.hibernate:main" from local module loader @4253c155
(finder: local module finder @8b9d578 (roots: C:\dev\wildfly-8.2.0.Final\modules,
C:\dev\wildfly-8.2.0.Final\modules\system\layers\base))]
据我了解 SLF4J 的狂野世界,wildfly 有一个自定义实现,正确的做法是从您的依赖项中排除对 org.slf4j 以外的任何内容的所有引用,并将 slf4j-api 包含在你的依赖。我可以确认我的 lib 文件夹中确实有 slf4j-api JAR,但我什至不知道如何开始调试它。请注意,应用程序的其他方面正在加载并正确记录,只有当我尝试反序列化 hibernate 尝试记录并失败并出现此异常的内容时。
以下是 pom 的一些摘录:
<!-- logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Dependencies>org.slf4j org.apache.xerces services</Dependencies>
<Class-Path>xxx-myproject-${project.version}.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
当前正在下载的slf4j与当前的Hibernate版本不匹配。您尝试将现有的 slf4j 依赖项替换为以下依赖项,或者在 maven 依赖项中提供特定版本。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
我也有类似的问题,但是修正的很不正常。
我有一个可序列化的 class。在 class 中,我使用的是记录器:
private Logger LOGGER = LoggerFactory.getLogger(MyClass.class);
但这 LOGGER
不是短暂的或静态的。因此,在运行时,错误 java.lang.ClassNotFoundException: org.slf4j.impl.Slf4jLogger
发生在我们的 class 对 serialize/unserialize 负责。所以我做了一点改动:
private static Logger logger = LoggerFactory.getLogger(MyClass.class);
问题解决了。