You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jackson-dataformat-csv 2.15.0出现NoSuchMethodError问题求助

Jackson CSV导出出现NoSuchMethodError问题排查

问题描述

我使用jackson-dataformat-csv 2.15.0版本编写了如下导出文本文件的代码:

List<HashMap<String, String>> data = <list of data>;
PrintWriter out = new PrintWriter(new File(FILE_PATH));
CsvSchema schema = null;
CsvSchema.Builder schemaBuilder = CsvSchema.builder();
// output verify list record
if (data != null && !data.isEmpty()) {
    schema = schemaBuilder.addColumn("ID").addColumn("Date").build()
            .withLineSeparator("\r").withHeader();

    CsvMapper mapper = new CsvMapper();
    mapper.writer(schema).writeValues(out).writeAll(data);
}
out.close();

运行时抛出以下错误:

2023-05-14 14:11:25,865 ERROR [stderr] (Thread-394) Exception in thread "Thread-394" java.lang.NoSuchMethodError: com.fasterxml.jackson.dataformat.csv.CsvFactory._createContentReference(Ljava/lang/Object;)Lcom/fasterxml/jackson/core/io/ContentReference;

2023-05-14 14:11:25,865 ERROR [stderr] (Thread-394)     at com.fasterxml.jackson.dataformat.csv.CsvFactory.createGenerator(CsvFactory.java:372)

2023-05-14 14:11:25,865 ERROR [stderr] (Thread-394)     at com.fasterxml.jackson.dataformat.csv.CsvFactory.createGenerator(CsvFactory.java:16)

2023-05-14 14:11:25,865 ERROR [stderr] (Thread-394)     at com.fasterxml.jackson.databind.ObjectWriter.createGenerator(ObjectWriter.java:703)

2023-05-14 14:11:25,865 ERROR [stderr] (Thread-394)     at com.fasterxml.jackson.databind.ObjectWriter.writeValues(ObjectWriter.java:789)

已完成的排查动作:

  • 检查Maven依赖层级,排除了冲突的Jackson库
  • 确认导出的WAR包中jackson-core、jackson-annotations、jackson-databind和jackson-dataformat-csv均为2.15.0版本,无旧版本重复库
  • Eclipse未提示方法缺失等编译错误

可能的原因及解决方案

1. 应用服务器自带Jackson版本冲突

即使WAR包内依赖都是2.15.0,Tomcat、JBoss这类应用服务器可能自带旧版本Jackson,运行时优先加载服务器提供的类,导致版本不匹配。

  • 解决办法:
    • 在WEB-INF/web.xml中添加配置,强制优先加载WEB-INF/lib下的类:
      <context-param>
          <param-name>org.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES</param-name>
          <param-value>false</param-value>
      </context-param>
      <loader delegate="false"/>
      
    • 或修改服务器配置排除自带Jackson,比如Tomcat在catalina.properties的tomcat.util.scan.DefaultJarScanner.jarsToSkip中添加Jackson相关jar包名。

2. 隐藏的依赖传递冲突

直接依赖检查无误,但第三方依赖可能间接引入不同版本的Jackson组件,Maven依赖树可能未完全展示,或打包时出现意外。

  • 解决办法:
    • 执行mvn dependency:tree -Dverbose,仔细排查所有Jackson组件的版本,确保全量为2.15.0
    • 在pom.xml的dependencyManagement中显式声明所有Jackson相关依赖的版本,阻断依赖传递带来的版本不一致:
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>com.fasterxml.jackson.core</groupId>
                  <artifactId>jackson-core</artifactId>
                  <version>2.15.0</version>
              </dependency>
              <dependency>
                  <groupId>com.fasterxml.jackson.core</groupId>
                  <artifactId>jackson-annotations</artifactId>
                  <version>2.15.0</version>
              </dependency>
              <dependency>
                  <groupId>com.fasterxml.jackson.core</groupId>
                  <artifactId>jackson-databind</artifactId>
                  <version>2.15.0</version>
              </dependency>
              <dependency>
                  <groupId>com.fasterxml.jackson.dataformat</groupId>
                  <artifactId>jackson-dataformat-csv</artifactId>
                  <version>2.15.0</version>
              </dependency>
          </dependencies>
      </dependencyManagement>
      

3. 编译与运行环境不一致

Eclipse编译用了正确版本,但运行时类路径被其他配置覆盖:

  • Eclipse服务器运行配置中混入了旧版本Jackson jar
  • target目录残留旧编译产物或jar包
  • 解决办法:
    • 执行mvn clean install彻底清理旧产物后重新打包
    • 检查Eclipse服务器运行配置,确保类路径仅包含WEB-INF/lib下的jar
    • 手动删除target目录后重新部署

4. 输出流类型兼容性问题

虽然报错指向方法缺失,但PrintWriter可能存在流处理兼容性问题,可尝试替换为FileOutputStream并使用自动关闭流:

try (FileOutputStream fos = new FileOutputStream(FILE_PATH)) {
    CsvMapper mapper = new CsvMapper();
    mapper.writer(schema).writeValues(fos).writeAll(data);
} catch (IOException e) {
    e.printStackTrace();
}

内容的提问来源于stack exchange,提问作者Kaninchen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:22:51