【问题标题】:Servlet can't find a libraryServlet 找不到库
【发布时间】:2013-01-07 10:43:31
【问题描述】:

我编写了一个命令行 Java 程序(一个 html 分析器),我正试图将它转换成一个网络服务。

我编写了一个 jsp 文件来收集一些信息并将它们传递给我的程序。 问题是 servlet 在分析之前无法找到我用来美化 html 源代码的库 jar (HTMLCleaner),因此它会以异常停止执行。

在 Tomcat 日志中,我发现这条消息:

严重:servlet [Validate] 的 Servlet.service() 在路径 [/MyWebService] 的上下文中引发异常 [Servlet 执行引发异常],根本原因 java.lang.NoSuchMethodError: org.htmlcleaner.HtmlCleaner.(Ljava/io/File;)V 在 it.mypackage.mybeautifierclass.(mybeautifierclass.java:39)

我使用 Netbeans 7.1.2 作为 IDE,我已经包含了 HtmlCleaner 的 jar 作为我的 web 服务项目的库,并且命令行版本运行良好。

为什么找不到 HTMLCleaner?

【问题讨论】:

    标签: java web-services tomcat servlets netbeans


    【解决方案1】:

    看来,tomcat 找到的库版本与您开发/编译时使用的版本不同:该类存在,但与编译时使用的接口不同。

    检查您使用的独立版本以及哪个版本进入了您的 web 应用程序的 WEB-INF/lib 目录。此外,您可能有多个版本可用,例如在 tomcat 的 /lib 目录中的全局类路径中 - 如果在您的 web 应用程序中找不到它,请在全局类路径中搜索它。

    编辑:作为 Anders cmets,确保找到该库的每个实例,即使它与您已经找到的目录位于同一目录中。

    【讨论】:

    • 第二个。也可能是类路径上有两个版本的库,而“错误”的版本是第一个。
    • 我搜了一下,整个硬盘只有一个版本的HtmlCleaner jar(2.2,最新版本)。我还清理了 Netbeans 的缓存,但问题仍然存在。没看懂哪个方法没找到,“(Ljava/io/File;)V”是什么意思……
    • 看起来像一个构造函数,以 java.io.File 作为参数。如果您第二次没有找到该库 - 您在类路径中拥有的库可能包含原始类,例如它是否重新打包/更改,并且您将其与原始 jar 文件一起部署?
    • 仍有问题。我在 3 个目录中找到了这个库: Netbeans\MyCommandLineProgram\src\lib\ Netbeans\MyCommandLineProgram\src\build\classes\lib\ Netbeans\MyWebService\src\build\web\WEB-INF\lib 我没有定义类路径。如果我没有在 Netbeans 面板中的项目库中包含这个库,我会得到一个 NoClassDefFoundError,如果我包含它,我会得到一个 NoSuchMethodError!
    • 比较三个库。它们不同吗?您需要确定使用哪一个进行编译,并准确地使用它进行部署(在 WEB-INF/lib 中)
    猜你喜欢
    • 2012-05-23
    • 2014-09-19
    • 1970-01-01
    • 2020-06-29
    • 2017-09-25
    • 2012-11-01
    • 2017-07-11
    • 2018-06-06
    • 2015-05-30
    相关资源
    最近更新 更多