NoClassDefFoundError从servlet访问jackrabbit jar

时间:2012-08-16 06:34:40

标签: spring-mvc noclassdeffounderror jackrabbit

我在尝试访问存储库时遇到上述错误 使用来自servlet的jackrabbit-standalone-2.4.2.jar。我没用过 长毛大战,因为我已经有一个厚厚的客户端应用程序工作,我想要 尽可能多地重用代码。我只是假设这样做是可能的。

测试我创建了一个小型Web应用程序。由于我无法附加一个zip文件 我将复制下面的doPost()方法:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Repository repository = new TransientRepository(
       "repository.xml", //embedded within the war
       "path/to/home/dir");
    Session session = null;
    try {
        session = repository.login();
        System.out.println("root node identifier: " +
        session.getRootNode().getIdentifier());
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        session.logout();
    }
}

当我从html表单发布到这个servlet时,异常有两部分:

java.lang.NoClassDefFoundError: javax/jcr/Repository
java.lang.ClassNotFoundException: javax.jcr.Repository

当我在其中添加jcr-2.0.jar时,我得到一个不同的错误:

java.lang.NoClassDefFoundError: org/apache/jackrabbit/core/TransientRepository

2 个答案:

答案 0 :(得分:0)

您最初获得ClassNotFoundException因为该类不在类路径中。你已经修好了。 NoClassDefFoundError表示类路径中的类,但初始化时出现问题。有关此区别的详细信息,另请参阅this question

所以类TransientRepository就在那里,但很可能是TransientRepository引用的类。这意味着您很可能没有在类路径中包含其他必需的jar文件。有关依赖项的完整列表(所需的jar文件),请参阅jackrabbit-standalone-2.4.2.jar,或查看Jackrabbit文档。它也可能意味着您拥有所有jar文件,但至少有一个jar文件版本错误。

答案 1 :(得分:0)

您最初获得ClassNotFoundException因为该类不在类路径中。你已经修好了。

NoClassDefFoundError表示类在类路径中,但初始化时出现问题。