1

我正在研究一個grails項目,並且已經將一個.jar文件放在項目的lib目錄中。ClassNotFoundException對於一個類但不是來自同一個包的另一個類?

我在我使用的grails項目中的一個java文件中一直收到ClassNotFoundException的運行時異常。

我定義爲這樣的方法:

void printValues(org.docx4j.wml.ParaRPr rpr){ 
} 

,我有那看起來像

import org.docx4j.openpackaging.exceptions.Docx4JException; 
import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; 
import org.docx4j.wml.Body; 
import org.docx4j.wml.Style; 

這就是拋出異常的進口部分。

但是,如果我改變我的方法是像

void printValues(org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart rpr){ 
} 

我沒有得到任何運行時異常。

這裏可能會發生什麼?我已經驗證了docx4j.jar文件包含ParaRPr,並且它有。我已經證實,這些課程是公開的,而且是。另外,我嘗試了org.docx4j.wml目錄中的不同類,有些給我例外,有些不給予。這怎麼可能?

以下是完整的堆棧跟蹤:

2010-09-15 12:37:00,198 [http-8080-1] ERROR errors.GrailsExceptionResolver - org.docx4j.wml.ParaRPr 
java.lang.ClassNotFoundException: org.docx4j.wml.ParaRPr 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) 
    at java.lang.Class.getDeclaredMethods(Class.java:1791) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46) 
    at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33) 
    at javatest.ResumeController$_closure4.doCall(ResumeController.groovy:47) 
    at javatest.ResumeController$_closure4.doCall(ResumeController.groovy) 
    at java.lang.Thread.run(Thread.java:619) 
    [groovyc] Compiling 1 source file to C:\dev\JavaTest\target\classes 

這裏是罐子-tf對jar文件的輸出 - 顯示在那裏ParaRPr類

$ jar -tf docx4j-nightly-20100914.jar | grep Para 
org/docx4j/dml/CTTextParagraph.class 
org/docx4j/dml/CTTextParagraphProperties.class 
org/docx4j/dml/diagram/CTParameter.class 
org/docx4j/dml/diagram/STParameterId.class 
org/docx4j/math/CTOMathPara.class 
org/docx4j/math/CTOMathParaPr.class 
org/docx4j/model/properties/paragraph/AbstractParagraphProperty.class 
org/docx4j/wml/CTParaRPrOriginal.class 
org/docx4j/wml/ParaRPr.class 
org/docx4j/wml/ParaRPrChange.class 
org/pptx4j/pml/CTTLBuildParagraph.class 
org/pptx4j/pml/CTTLTimeNodeParallel.class 
org/pptx4j/pml/STTLParaBuildType.class 
org/xlsx4j/sml/CTParameter.class 
org/xlsx4j/sml/CTParameters.class 
org/xlsx4j/sml/STParameterType.class 
+1

請張貼的jar **完整的**堆棧跟蹤。特別是*根本原因*部分是最重要的。 – BalusC 2010-09-15 17:08:15

+0

Full Stacktrace posted :) – Derek 2010-09-15 17:13:12

回答

1

docx4j有如下描述的多個依賴性:http://dev.plutext.org/trac/docx4j/wiki/Docx4jDependencies

它看起來像ParaRPr實現兒童是在org.jvnet.jaxb2_commons我相信你的運行時環境中缺少有兒童

+0

這就是它的樣子。好決定。現在我知道如何在未來開始調試這些東西 – Derek 2010-09-15 19:28:04

1

Yould可能會錯過一個罐子哪個docx4j.jar依賴。

+0

+1:雖然ClassNotFound異常應該注意 - 它應該說類似於「加載類org.docx4j.wml.ParaRPr-無法找到依賴關係X」或類似的東西(確切的語法正在逃避我時刻)。 – aperkins 2010-09-15 17:08:51

+0

Hrmm,我會這麼想的。我只是發佈stacktrace。 – Derek 2010-09-15 17:11:32

+0

看起來,如果我能在.jar中看到它抱怨的文件,那麼它應該沒問題吧? – Derek 2010-09-15 17:11:59

相關問題