【发布时间】:2014-04-02 08:19:30
【问题描述】:
在这个领域似乎有很多关于 SO 的问题,但我找不到与我的场景完全一致的问题:
我在 Eclipse 中有两个项目:Core 和 Interface。
在核心项目中,我有 5 个.jar 文件,其中包含有用的类等等。假设其中一个罐子名为 DAO。
在 Interface 项目中,我进入了 Build Path(通过右键单击 > Build Path > Configure Build Path...)并进入 Projects 部分,然后添加了 Core 项目。
起初 Interface 项目仍然看不到 DAO.jar 中的类,这让我很困惑,但我发现通过进入 Core 项目的构建路径并选中 DAO.jar 旁边的框(用于导出)编译器停止抱怨,我可以使用 DAO.jar 中的类。
(具体来说,我正在制作一个带有 Servlet 和 JSP 等的 Java webapp,在本地 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 项目?
作为说明,我不希望直接将 jars 添加到 Interface 项目中,因为 Core 项目可以被其他项目使用,并且我希望对 Core 项目级联进行修改以所有依赖项目。
谢谢!
【问题讨论】:
-
您是否尝试使用neabeans 调试器运行它?这可以通过
clean and build解决 -
@Desolator 我正在使用 Eclipse。我做了几次清理 Tomcat 服务器并重建,但没有效果。
标签: java eclipse jar noclassdeffounderror buildpath