【问题标题】:Correct set of dependencies for using Jackson mapper使用 Jackson 映射器的正确依赖集
【发布时间】:2013-08-28 01:51:35
【问题描述】:

我是 Jackson 的新手,我正在编写一些代码进行练习。我发现新版本的 Jackson 库可以在 Fasterxml 上找到:Jackson,所以我在我的 Maven pom 文件中添加了以下依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.2.2</version>
</dependency>

我原以为我可以直接使用ObjectMapper,但是花了很多时间后我发现要使用ObjectMapper,我必须在下面添加旧库:

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.2</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.2</version>
</dependency>

我有点困惑。谁能告诉我这是为什么?

【问题讨论】:

  • 您对包名有疑问吗?据我所知 com.fasterxml.jackson.databind.ObjectMapper 是 jackson-databind-2.2.2.jar 的一部分
  • 问题是,一旦我删除了最后两个依赖项。由于 ObjectMapper,我无法编译我的代码。 “包名”是什么意思?谢谢
  • 对我来说,这看起来像您的代码使用 org.codehaus.jackson.map.ObjectMapper 而不是 com.fasterxml.jackson.databind.ObjectMapper 并且因此找不到类并且无法编译。
  • 你能给我们看看有问题的代码吗?

标签: java json jackson


【解决方案1】:

除了修复导入,做一个新的maven clean compile -U。请注意-U 选项,它会带来新的依赖项,有时编辑器很难处理这些依赖项。让编译由于未导入的类而失败,但至少您可以选择在 maven 命令之后导入它们。

只是做 Maven->从 Intellij 重新导入对我不起作用。

【讨论】:

    【解决方案2】:

    我在这上面花了几个小时。

    即使我有正确的依赖关系,问题也只有在我删除 C:\Users\username.m2 下 .m2 存储库中的 com.fasterxml.jackson 文件夹并更新项目后才得到解决

    【讨论】:

    • 它发生了。问题是,除非我们使用 [] 表示法指定工件版本,否则指定的是“建议”。 Maven 将尝试获取该版本,但如果您的传递依赖项中有某些东西需要它,则会选择不同的东西。我定期对我的 .m2 进行核弹只是为了避免这些“意外”。
    【解决方案3】:
    <properties>
      <!-- Use the latest version whenever possible. -->
      <jackson.version>2.4.4</jackson.version>
    </properties>
    <dependencies>
       <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
      </dependency>
    </dependencies>
    

    您有一个方便的 ObjectMapper(来自 Jackson Databind 包)。 如果是这样,你可以这样做:

    JsonFactory factory = objectMapper.getFactory();
    

    来源:https://github.com/FasterXML/jackson-core

    因此,您在 pom 中已有的 3 个“fasterxml”依赖项对于 ObjectMapper 来说已经足够了,因为它包括 jackson-databind。

    【讨论】:

      【解决方案4】:

      不,您可以简单地使用com.fasterxml.jackson.databind.ObjectMapper。 很可能你忘了修复你的import-statements,删除所有对 codehaus 的引用,然后你就成功了。

      【讨论】:

        【解决方案5】:

        Jackson 2.x 中的软件包名称从 org.codehaus2 更改为 com.fasterxml1。所以如果你只需要 ObjectMapper,我认为 Jackson 1.X 可以满足你的需求。

        【讨论】:

          猜你喜欢
          • 2013-02-16
          • 2016-08-07
          • 2020-08-02
          • 2016-12-28
          • 1970-01-01
          • 1970-01-01
          • 2019-10-13
          • 1970-01-01
          • 2019-04-25
          相关资源
          最近更新 更多