2012-08-16 68 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表示類在類路徑中,但初始化它時出現問題。