Clojure加载gson外部库报ns不符合spec异常如何解决
问题根因
你的代码存在两处核心错误,触发了clojure.core/ns的spec校验异常:
- 依赖配置文件
deps.edn语法错误::deps对应的值必须是map结构,你漏了包裹依赖项的大括号,括号也不匹配,导致整个配置结构非法,依赖根本没有被正确拉取识别。 - 类加载方式错误:Gson是原生Java库,没有提供Clojure命名空间,不能用加载Clojure库的
:require语法引入;你写的google.code.gson/gson既不是合法的Clojure命名空间,也不是Gson对应的Java类路径。
修正方案
- 修正
deps.edn依赖配置,补全合法的map结构:
{:deps {com.google.code.gson/gson {:mvn/version "2.9.0"}}}
- 修正
core.clj的命名空间声明,用:import语法导入需要使用的Gson Java类。Gson的核心类路径为com.google.gson.Gson,示例写法:
(ns core (:import [com.google.gson Gson]) (:gen-class)) ;; 导入后可直接实例化使用 ;; (def gson-instance (Gson.)) ;; (.toJson gson-instance {:name "test" :age 18})
如果需要导入com.google.gson包下的所有类,可以把import语句写成(:import [com.google.gson *]),生产环境更推荐按需导入实际用到的类,减少不必要的类加载。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

