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

使用Emoji4j触发java.lang.NoSuchFieldError: USE_DEFAULTS错误求助

解决Emoji4j触发的java.lang.NoSuchFieldError: USE_DEFAULTS错误

这个问题的核心是Jackson依赖版本冲突:Emoji4j内部依赖特定版本的Jackson库,但你的项目中引入的Jackson版本与它所需版本不兼容,导致JsonInclude类中找不到USE_DEFAULTS字段。

问题分析

从错误栈可以看到,错误起源于emoji4j.EmojiManager初始化时创建ObjectMapper,而Jackson的JsonInclude$Value静态初始化时找不到USE_DEFAULTS字段——这个字段是在Jackson 2.8+版本中新增的,如果你的项目使用了更早版本的Jackson,就会触发这个错误。

解决步骤

  • 第一步:确认Emoji4j依赖的Jackson版本
    查看Emoji4j的官方依赖说明(或直接查看其pom.xml文件),确认它要求的Jackson版本。比如Emoji4j 0.5.0版本通常依赖Jackson 2.9.x系列。

  • 第二步:统一项目中的Jackson版本
    在你的项目构建文件(Maven的pom.xml或Gradle的build.gradle)中,强制指定所有Jackson相关依赖的版本,确保与Emoji4j兼容:
    比如Maven中可以这样配置:

    <properties>
        <jackson.version>2.9.10</jackson.version>
    </properties>
    
    <dependencies>
        <!-- 统一Jackson依赖版本 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- 你的Emoji4j依赖 -->
        <dependency>
            <groupId>com.kcthota</groupId>
            <artifactId>emoji4j</artifactId>
            <version>0.5.0</version>
        </dependency>
    </dependencies>
    
  • 第三步:排除冲突的依赖
    如果项目中其他第三方库引入了不兼容的Jackson版本,需要在依赖声明中排除这些冲突的子依赖:
    比如Maven中:

    <dependency>
        <groupId>第三方库groupId</groupId>
        <artifactId>第三方库artifactId</artifactId>
        <version>版本号</version>
        <exclusions>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • 第四步:验证依赖树
    使用构建工具命令检查依赖树,确保所有Jackson相关依赖版本一致:

    • Maven:mvn dependency:tree
    • Gradle:./gradlew dependencies

代码优化提示

你的检测表情的代码可以稍微优化,避免空指针或无效拆分问题:

String message = sCurrentLine.split(",")[6];
// 使用\\s+匹配任意空白符,避免拆分出空字符串
String[] words = message.split("\\s+"); 
for (String s : words) {
    if (s.isEmpty()) continue;
    System.out.println(s);
    System.out.println(" Has Emojis: " + EmojiUtils.isEmoji(s));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:52:14