java - 使用其他项目的 JAR 时出现 NoClassDefFoundError

标签 java eclipse jar noclassdeffounderror buildpath

在这一领域似乎有很多关于 SO 的问题,但我还没有找到一个完全符合我的场景的问题:

我在 Eclipse 中有两个项目:CoreInterface

在核心项目中,我有 5 个 .jar 文件,其中包含有用的类等。假设其中一个 jar 名为 DAO

在界面项目中,我进入构建路径(通过右键单击 > 构建路径 > 配置构建路径...)并进入项目部分,然后添加核心项目。

起初,Interface 项目仍然看不到 DAO.jar 中的类,这让我很困惑,但我发现,通过进入 Core 项目的构建路径并选中 DAO.jar 旁边的框(用于导出)编译器停止提示,我可以使用 DAO.jar 中的类。

(具体来说,我正在使用 Servlet 和 JSP 等制作一个 Java Web 应用程序,在本地 Tomcat 服务器上运行。)

我构建了该项目,但是当我导航到 Get 方法涉及 DAO.jar 中的类的 Servlet 时,我收到 NoClassDefFoundError。这是堆栈跟踪:

java.lang.ClassNotFoundException: dao.DirectSqlVisitorImpl
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2928)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1174)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    interface.DonationsServletController.doGet(DonationsServletController.java:79)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我收集到的是,JRE 在运行时无法找到 DirectSqlVisitorImpl 类的定义,尽管 Eclipse 错误检查允许它运行,因为我已经在(看似)正确的位置配置了构建路径时尚。

那么我需要做什么来确保 jar 通过 Core 项目拉入 Interface 项目?

请注意,我不想做类似将 jar 直接添加到 Interface 项目的操作,因为 Core 项目可以由其他项目使用,并且我希望对 Core 项目级联进行修改所有依赖项目。

谢谢!

最佳答案

您的问题是 eclipse 编译代码时使用的类路径与 tomcat 在运行时使用的类路径之间的差异。我已经在基于 OSGi 的桌面应用程序中处理过这个问题,尽管我还没有学会如何将 JavaEE 应用程序打包为单独的组件。不过,我可以告诉您,找到答案的途径是学习如何构建 WAR 和/或 EAR 文件,以便其中一个文件中的库由 bundle 导出,而另一个文件可以导入它们。

关于java - 使用其他项目的 JAR 时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22110267/

相关文章:

java - java.lang.String 值的布局无效

python - 在 pydev 中调试 - 如何使 python 对象可扩展 - 就像在 java 调试器中一样?

java - 无法从 Eclipse 中动态 Web 项目的 Maven 依赖项导入类

java - 控制 Tomcat 5 上 WEB-INF/lib 中 jar 的类路径排序?

java - 将 jar 文件中的控制台值打印到 GUI

java - 使用 action_view Intent 后 Android 应用程序崩溃

java - 进程在简单的 for 循环中停滞,取决于迭代器类型(潜在的 JVM 错误?)

java - jsp文件在子域上不起作用

java - 让java编译器输出类型推断信息

java.lang.VerifyError : Bad local variable type by deploying war file