gpt4 book ai didi

java - NoClassDefFoundError 在协议(protocol)上需要其命名空间时

转载 作者:行者123 更新时间:2023-11-30 11:53:56 25 4
gpt4 key购买 nike

这是我得到的异常的秘诀(编辑:ProtoImpl 是在另一个 ns 中定义的,我将其省略以简化描述):

myns.clj

(ns myns)

(defprotocol Proto
(func [this]))

(extend-protocol Proto
ProtoImpl
(func [this] (do-something ...)))

互操作.clj

(ns interop
(:require [myns :as m]))

(defn startup
[]
(m/func (ProtoImpl.)))

(gen-class :name interop.Interop
:prefix "interop-"
:methods [[boot [] void]])

(defn interop-boot
[this]
(startup)))

myns.clj 和 interop.clj 都在一个 webapp 中发布,后者也是 AOT 编译的,因此可以立即在类路径中生成可用的 Interop.class。这被实例化为 Spring bean。

当 webapp 启动时,它无法引导并出现以下异常:

[...]
at myns__init.load(Unknown Source)
at myns__init.<clinit>(Unknown Source)
[...]
at interop.Interop.<clinit>(Unknown Source)
[...]
Caused by: NoClassDefFoundError: myns.Proto

什么会导致这个问题?


编辑: 我无法再重现该错误,我重新编译并重新运行了该应用程序,该应用程序完美启动...不过我真的很想了解在哪些情况下会出现此类问题向上。

在我看来,类加载器找不到 Proto 的类定义,我认为这是 clojure RT 的角色,一旦相关的 .clj 源文件被解析就会加载.正如您在我收到的堆栈跟踪摘录中看到的那样,正在加载 myns,并且正是在那里定义了 Proto。我怎么会得到一个 NoClassDefFoundError

最佳答案

Clojure 记录应该被导入。以下应该有效:

(ns interop
(:require [myns :as m])
(:import myns.Proto))

关于java - NoClassDefFoundError 在协议(protocol)上需要其命名空间时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6003313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com