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

添加javax.json类路径后OpenJDK11编译报找不到符号问题

问题原因与解决方案

你不需要将jar包放置到指定特殊路径,编译报错和jar存放位置无关,核心问题是代码写法错误,另外还存在一个运行时依赖遗漏的隐患,具体修正方案如下:

1. 修正代码语法错误

你的代码有两处直接导致编译失败的语法问题:

  • 类名拼写错误:你导入的JSON对象类是javax.json.JsonObject,代码中错写为JSONObject(Java是大小写敏感语言,类名大小写不匹配就会报找不到符号)
  • 静态方法调用错误:Json.createObjectBuilder()是静态工厂方法,直接通过类名调用即可,前面不能加new关键字。加了new之后编译器会把Json.createObjectBuilder识别为内部类名去查找,自然会报找不到类的错误。另外这个方法返回值类型是JsonObjectBuilder,不是最终的JsonObject,需要调用build()方法后才能得到JsonObject实例。

修正后的测试代码如下:

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;

public class ns3_inputs {
    public static void main (String[] args) {
        JsonObjectBuilder builder = Json.createObjectBuilder();
        builder.add("foo", "bar");
        JsonObject obj = builder.build();
        // 测试输出
        System.out.println(obj.toString());
    }
}

也可以简化成链式写法:

JsonObject obj = Json.createObjectBuilder()
        .add("foo", "bar")
        .build();

2. 补全运行时依赖

你当前引入的javax.json-1.0.jar只是JSR-353(Java JSON处理规范)的API定义包,只包含接口没有具体实现,就算编译通过,运行时也会抛出Provider not found的错误。
你需要额外下载同版本的JSON实现包,将其和API包放在同一目录,配置CLASSPATH时把两个包都包含进去即可,不需要放到JDK扩展目录之类的特殊路径。如果不想分开下载两个包,也可以直接下载合并了API和实现的完整jar包,单独引入这一个包就能正常编译运行。

3. 正确的编译与运行命令

假设你的API包、实现包、Java源文件都放在/Diss/frontend/目录下,先配置CLASSPATH:

# 如果是分开的API+实现两个包,用冒号分隔多个jar路径
export CLASSPATH=/Diss/frontend/javax.json-1.0.jar:/Diss/frontend/javax.json-impl-1.0.jar

编译命令:

javac ns3_inputs.java

因为你已经把当前路径.和jar包路径都加入CLASSPATH了,不需要额外加-cp参数;如果临时不想配置全局CLASSPATH,也可以直接在编译运行时指定:

# 编译
javac -cp ".:javax.json-1.0.jar:javax.json-impl-1.0.jar" ns3_inputs.java
# 运行
java -cp ".:javax.json-1.0.jar:javax.json-impl-1.0.jar" ns3_inputs

正常运行后会输出{"foo":"bar"},说明配置成功。

注:你开发桌面端应用用这个标准库完全适配,不需要依赖Android专属的JSON类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:39:20