- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
背景:
我正在尝试在 Java 类中启动嵌入式 Tomcat 服务器,通过 JRuby 从 Ruby 脚本启动。这意味着我使用的所有 jar 都需要从 ruby 脚本加载。
在我的 ruby 脚本中:
require 'java'
load 'servlet-api-2.5.jar'
...
com.mycompany.RunWebApplicationTomcat.main(nil)
//com.mycompany.RunWebApplicationJetty.main(nil) //Commented out for Tomcat Test
Java 类如下:
public class RunWebApplicationTomcat {
public static void main(String[] args) throws Exception {
try {
Class.forName("javax.servlet.http.HttpServlet");
} catch(ClassNotFoundException e) {
System.err.println(e.getMessage());
}
DispatcherServlet dispatcherServlet = new DispatcherServlet();
....
}
}
问题:
当我运行脚本时,我在 Class.forName 测试中没有发现异常,但在尝试初始化 DispatcherServlet 时,我在 javax.servlet.http.HttpServlet 上得到了 ClassNotFoundException。 (DispatcherServlet 是 spring servlet,但我尝试了其他 servlet 实现并遇到了相同的异常)
为什么我 99.9% 确定 servlet-api.jar 在类路径中:
真正奇怪的是我已经使用相同的模式成功创建了一个嵌入式 Jetty 服务器。该服务器不需要 HttpServlet 类。然而,它确实使用了位于同一个 servlet-api.jar 中的 HttpServletRequest/Response 类,并且它工作得很好。
问题:
1. 有谁知道加载到类路径中的 jar 中的某个特定类是如何找不到的?
2. 是否有一些java 安全机制可以防止类被实例化? (JRuby 可执行文件是一个自定义的、专有的黑盒,所以我不确定里面会发生什么)
3. 我是否可以执行任何其他测试来阐明问题?
堆栈跟踪
Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
... 38 more
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
最佳答案
ClassNotFoundException
可能由多种原因引起,包括以下内容:
有问题的类不存在。
类在那里,但它依赖的其他一些类/接口(interface)/注释/枚举不在那里。
您的类依赖于先前类初始化失败的其他类。
证据似乎与所有这些相矛盾。 (根据 javadoc,Class.forName(String)
触发类初始化。)但是,堆栈跟踪将提供更多证据。
这里的类加载器哪里可能会发生一些棘手的事情;即 DispatcherServlet 类之前使用与 forName
正在使用的“当前”类加载器不同的类加载器加载。
您还应该考虑 forName
抛出您未在示例中测试的不同 Exception
(或 Error
)的可能性代码。
关于java - 来自 jar 的类上的 ClassNotFoundException,我可以从中成功加载其他类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132991/
这个问题在这里已经有了答案: Is a moved-from vector always empty? (4 个答案) 关闭 4 年前。 从 std::vector move 数据后,它的容量是否必
我是一名优秀的程序员,十分优秀!