2012-08-16 60 views
2

当使用servlet中的jackrabbit-standalone-2.4.2.jar尝试访问版本库 时,出现上述错误。我没有使用jackrabbit战争,因为我已经有一个胖客户端应用程序工作,我想要 重用尽可能多的代码。我只是假设这是可能的。NoClassDefFoundError访问来自servlet的jackrabbit 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形成异常有2个部分:

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

时我想补充JCR-2.0.jar在它然后我得到一个不同的错误:

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

回答

0

您最初得到了ClassNotFoundException因为那类在classpath中没有。你修好了。 NoClassDefFoundError表示classpath中类,但初始化它时出现问题。有关此区别的详细信息,另请参阅this question

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

+0

嗨托马斯, 我再次检查了一切。 jar包含在我的classpath中,并且版本也是正确的。但仍然得到这个错误。 – 2012-08-16 09:55:56

0

您最初得到了ClassNotFoundException,因为该类不在类路径中。你修好了。

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