首页 > 解决方案 > jackson-databind 抛出 NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper 即使它在阴影罐中

问题描述

我正在尝试运行具有外部依赖项(JDA)的海绵插件,当我使用该依赖项构建一个带阴影的 jar 时,它仍然说没有找到 jackson-databind,即使当我打开 jar 本身时我可以看到它不能看到的类寻找。

我尝试将 JDA 作为本地 jar 包含在内,我尝试将 jackson 本身包含为依赖项,我什至尝试取出 JDA 并仅包含 jackson,但它仍然找不到它。出于某种原因,杰克逊似乎不喜欢被包含在有阴影的罐子里

plugins {
    id 'org.spongepowered.plugin' version '0.9.0'
    id "com.github.johnrengelman.shadow" version "5.1.0"
}

group = pluginGroup
version = pluginVersion

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

repositories {
    jcenter()
}

dependencies {
    compileOnly 'org.spongepowered:spongeapi:7.1.0'
    annotationProcessor 'org.spongepowered:spongeapi:7.1.0'
    compile 'net.dv8tion:JDA:4.0.0_52'

}

sponge.plugin.id = pluginId

我不得不想象这与它是一个插件而不是一个独立的 jar 有关,并且会以某种方式影响类路径或其他东西,此时我不确定发生了什么。每当我使用带阴影的 jar 启动服务器并尝试使用 JDA 时,它都会抛出此错误:

[22:08:55 ERROR] [STDERR]: Exception in thread "OkHttp Dispatcher" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.api.utils.data.DataObject.<clinit>(DataObject.java:54)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.api.requests.Response.parseBody(Response.java:204)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.api.requests.Response.parseBody(Response.java:182)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.api.requests.Response.get(Response.java:124)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.api.requests.Response.getObject(Response.java:105)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.api.utils.SessionControllerAdapter.lambda$getGateway$0(SessionControllerAdapter.java:85)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.internal.requests.RestActionImpl.handleSuccess(RestActionImpl.java:247)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.internal.requests.RestActionImpl.handleResponse(RestActionImpl.java:237)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.api.requests.Request.handleResponse(Request.java:197)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.internal.requests.Requester.lambda$attemptRequest$1(Requester.java:191)
[22:08:55 ERROR] [STDERR]:  at net.dv8tion.jda.internal.requests.FunctionalCallback.onResponse(FunctionalCallback.java:60)
[22:08:55 ERROR] [STDERR]:  at okhttp3.RealCall$AsyncCall.execute(RealCall.java:216)
[22:08:55 ERROR] [STDERR]:  at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
[22:08:55 ERROR] [STDERR]:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[22:08:55 ERROR] [STDERR]:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[22:08:55 ERROR] [STDERR]:  at java.lang.Thread.run(Thread.java:748)
[22:08:55 ERROR] [STDERR]: Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
[22:08:55 ERROR] [STDERR]:  at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:101)
[22:08:55 ERROR] [STDERR]:  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[22:08:55 ERROR] [STDERR]:  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[22:08:55 ERROR] [STDERR]:  ... 16 more

标签: javagradlejackson-databindspongeapi

解决方案


推荐阅读