- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被 REPLed 到一个正在运行的服务中,并且有一个 var 指向一个类加载器,通过该类加载器加载了一个插件(安装了 my.package
)。
REPL 使用的 DynamicClassLoader 不包含我希望与之交互的插件;尽管有此限制,我希望能够使用从插件加载的类。
以下作品:
=> (.loadClass plugin-classloader "my.package.MyClass")
my.package.MyClass
...而以下内容则不然(显式覆盖线程上下文类加载器):
=> (do
(.setContextClassLoader (Thread/currentThread) plugin-classloader)
(Class/forName "my.package.MyClass"))
ClassNotFoundException my.package.MyClass java.net.URLClassLoader$1.run (URLClassLoader.java:202)
...这也没有(显式覆盖线程上下文类加载器和 clojure.lang.Compiler/LOADER 引用):
=> (let [dcl (clojure.lang.DynamicClassLoader. plugin-classloader)]
(.setContextClassLoader (Thread/currentThread) dcl)
(with-bindings* {clojure.lang.Compiler/LOADER dcl}
(eval '(pr-str (Class/forName "my.package.MyClass")))))
ClassNotFoundException my.package.MyClass java.net.URLClassLoader$1.run (URLClassLoader.java:202)
...这也不是:
=> my.package.MyClass
CompilerException java.lang.ClassNotFoundException: my.package.MyClass, compiling:(NO_SOURCE_PATH:0)
设置时 Class.forName()
不应该使用线程上下文类加载器吗?我正在尝试对第三方代码进行一些调用,以进行内省(introspection)魔法;即使应该设置线程上下文类加载器,相关工具也会失败并出现 ClassNotFoundExceptions。
在我显式设置上下文类加载器的情况下,堆栈跟踪表明 Clojure 的 DynamicClassLoader(而不是插件类加载器变量中的 BundleClassLoader)正在使用:
=> (e)
java.lang.ClassNotFoundException: my.package.MyClass
at java.net.URLClassLoader$1.run (URLClassLoader.java:202)
java.security.AccessController.doPrivileged (AccessController.java:-2)
java.net.URLClassLoader.findClass (URLClassLoader.java:190)
clojure.lang.DynamicClassLoader.findClass (DynamicClassLoader.java:61)
java.lang.ClassLoader.loadClass (ClassLoader.java:306)
java.lang.ClassLoader.loadClass (ClassLoader.java:247)
java.lang.Class.forName0 (Class.java:-2)
java.lang.Class.forName (Class.java:169)
最佳答案
REPL 调用的
clojure.lang.Compiler/eval
使用 clojure.lang.Compiler/LOADER
,而不是线程本地类加载器。在调用 eval
之前,适当的类加载器需要绑定(bind)到此 var - 因此添加一层包装可以解决此问题:
=> (let [dcl (clojure.lang.DynamicClassLoader. plugin-classloader)]
(with-bindings {clojure.lang.Compiler/LOADER dcl}
(eval '(Class/forName "my.package.MyClass"))))
my.package.MyClass
关于clojure - Clojure 中的 Class/forName 不尊重 ContextClassLoader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941330/
在 tomcat 从 8.5.6 升级到 8.5.28 之后,并行流停止为线程提供 contextClassLoader: 因为 Warmer::run 无法加载其中的类。 warmers.paral
我正在尝试定义自定义类加载器。 public class ExampleLoader extends ClassLoader { public Class findClass(String n
我被 REPLed 到一个正在运行的服务中,并且有一个 var 指向一个类加载器,通过该类加载器加载了一个插件(安装了 my.package)。 REPL 使用的 DynamicClassLoader
我有一个 Grails 2.1 应用程序正在开发中,我有一个调用 Thread.currentThread().contextClassLoader.getResource(fileName) 的服务
我是一名优秀的程序员,十分优秀!