【问题标题】:java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/FilterProviderjava.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/FilterProvider
【发布时间】:2022-09-20 15:52:28
【问题描述】:

我正在将我的 log4j 配置从 PatternLayout 切换到 JasonLayout。更改后,我开始出现以下错误:

ERROR Could not create plugin of type class org.apache.logging.log4j.core.layout.JsonLayout for element JsonLayout: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/FilterProvider java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/FilterProvider
    at org.apache.logging.log4j.core.layout.JsonLayout.<init>(JsonLayout.java:159)
    at org.apache.logging.log4j.core.layout.JsonLayout.<init>(JsonLayout.java:71)
    at org.apache.logging.log4j.core.layout.JsonLayout$Builder.build(JsonLayout.java:103)
    at org.apache.logging.log4j.core.layout.JsonLayout$Builder.build(JsonLayout.java:79)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:124)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1138)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1063)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1055)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1055)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:664)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:258)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:304)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:621)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:694)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:711)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
    at de.ic_consult.planetarium.listener.ListenerEmbedded.<clinit>(ListenerEmbedded.java:49)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ser.FilterProvider
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 21 more

这个类来自jackson-databind,在我的例子中,它是2.13.1版本,它来自log4j 2.17.2的依赖。 我正在使用 gradle 来管理依赖项,而 log4j 依赖项来自一个内部框架,其中我看到 log4j 被加载为:

  implementation(\'org.apache.logging.log4j:log4j-api\')
  runtimeOnly(\'org.apache.logging.log4j:log4j-core\')
  runtimeOnly(\'org.apache.logging.log4j:log4j-jcl\')

难道是我将 log4j-core 和 logj4-jcl 作为 runtimeOnly 加载的事实导致了这个问题吗?

    标签: java gradle log4j noclassdeffounderror


    【解决方案1】:

    jackson-databind 是一个可选的log4j-core 的依赖。基本上这意味着如果你想包含它,你必须明确声明它是对你的项目的依赖(参见Maven optional dependencies)。

    【讨论】:

    • 谢谢,这正是问题所在。
    猜你喜欢
    • 2020-10-29
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2020-11-24
    • 2015-08-02
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多