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

Clojure Leiningen运行Rhino ClojureScript REPL编译语法错误排查

解决lein trampoline cljsbuild repl-rhino启动时javax.xml.bind.DatatypeConverter找不到的问题

问题根源

javax.xml.bind.DatatypeConverter属于JAXB API组件,在Java 8及之前是JDK核心库的一部分,但从Java 9开始,JAXB被移出核心库并模块化,默认情况下JVM不会加载该模块,导致依赖它的Rhino引擎抛出ClassNotFoundException。

解决方案

1. 切换到Java 8运行

直接将项目的JDK版本切换到Java 8(无需额外配置):

  • 临时切换:在终端执行export JAVA_HOME=/path/to/your/jdk8,然后重新运行lein trampoline cljsbuild repl-rhino
  • 永久切换:使用jEnv等JDK版本管理工具将项目默认JDK设为8

2. 在project.clj中添加JAXB依赖

如果需要使用Java 9+版本,在项目的:dependencies中添加JAXB相关依赖,让Leiningen自动引入缺失的类:

:dependencies [
  ;; 其他已有依赖
  [org.glassfish.jaxb/jaxb-runtime "2.3.8"] ; Java 11+推荐的聚合依赖
]

或者针对Java 9-10版本,添加拆分的依赖:

:dependencies [
  ;; 其他已有依赖
  [javax.xml.bind/jaxb-api "2.3.1"]
  [com.sun.xml.bind/jaxb-impl "2.3.1"]
  [com.sun.xml.bind/jaxb-core "2.3.0.1"]
  [javax.activation/activation "1.1.1"]
]

添加完成后,重新执行启动命令即可。

3. 配置JVM参数加载JAXB模块(仅Java 9-10适用)

在project.clj中添加JVM启动参数,强制JVM加载JAXB模块:

:jvm-opts ["--add-modules" "java.xml.bind"]

注意:Java 11及之后java.xml.bind模块已被移除,此方法不再适用,推荐使用添加依赖的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:35:17