杰克逊无法访问com.fasterxml.jackson.core.ObjectCodec。

32

这个问题是对这个问题的跟进。在下面的代码中,我似乎无法访问jackson库:

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.ObjectWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ServerConfiguration {
    public String info = null;
    public String idlURL = null;
    public String idlContents = null;
    public List<ServerInfo> servers = new ArrayList<>();

    public final void clear() {
        info = null;
        idlURL = null;
        idlContents = null;
        if (servers != null)
            servers.clear();
    }

    private final static ObjectReader jsonReader;
    private final static ObjectWriter jsonWriter;

    static {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); // <== Error:(52, 15) java: cannot access com.fasterxml.jackson.core.JsonGenerator class file for com.fasterxml.jackson.core.JsonGenerator not found
        //mapper.configure(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED, true);
        jsonWriter = mapper.writer();
        jsonReader = mapper.reader(ServerConfiguration.class);
    }

    public static ServerConfiguration fromJson(String json) throws IOException {
        return jsonReader.<ServerConfiguration>readValue(json); // <== Error:(59, 26) java: cannot access com.fasterxml.jackson.core.JsonProcessingException class file for com.fasterxml.jackson.core.JsonProcessingException not found
    }

    public String toJson() throws IOException {
        return jsonWriter.writeValueAsString(this);
    }

}
尽管jar文件在类路径中(自动完成在Intellij中显示方法声明),我还是缺少什么?

在我的情况下,原因是类路径中有两个不同版本的Jackson库。 - Leukipp
6个回答

40

当我遇到这个问题时,我的classpath里有jackson-annotations jackson-databind的jar包,但没有jackson-core

将jackson-core添加到classpath中解决了我的问题。


2
如果您正在使用Maven,请确保使用正确的<scope> </ scope>值。这告诉Maven何时以及在某些情况下如何解析依赖项。可用的值为compileprovidedruntimetestsystemimport,您可以在此处阅读有关它们的更多信息:https://dev59.com/vV8d5IYBdhLWcg3wTQsn#29230903 - Simon Cedergren Malmqvist
将以下内容添加到pom.xml文件中,这对我来说解决了问题。感谢你分享你的发现,这是基于那个的。<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency> - SydMK

16

我遇到了类似的问题,后来发现是IntelliJ的问题。

这个方法帮助我解决了问题:

尝试文件 > 无效缓存并重启 > 无效和重启

如果没有帮助,删除.idea目录并从pom/gradle构建文件重新导入。


5

同时,确保你所有使用的 Jackson 依赖项版本相同,如下:

implementation 'com.fasterxml.jackson.core:jackson-core:2.10.1'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.10.1'
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.10.1'
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.10.1'

之前我使用的是jackson-core:2.11.0,这就是问题所在。


2
我也遇到了这种错误:Cannot access com.fasterxml.jackson.core.TreeNode 我的第一个maven POM版本包含以下内容:
  • jackson-annotations
  • jackson-databind
它一直很好用,直到我想添加jackson-core进行单元测试。我使用test作用域添加了它,然后出现了错误。经过一番调查,我发现要使其工作,必须删除test作用域,否则就会出现此错误。如果有人有解释,我会很感兴趣 :)

0

1 前往 .m2/repository 并删除冲突的文件

2 mvn -U clean install


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接