一个类的ClassNotFoundException而不是同一个包中的另一个类?

时间:2010-09-15 17:02:31

标签: java packages noclassdeffounderror classnotfoundexception

我正在开发一个grails项目,我已经在项目的lib目录中放了一个.jar文件。

我在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

这是jar文件中jar -tf的输出 - 显示那里的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

2 个答案:

答案 0 :(得分:1)

你可能错过了docx4j.jar所依赖的jar。

答案 1 :(得分:1)

docx4j有许多依赖关系,如下所述:http://dev.plutext.org/trac/docx4j/wiki/Docx4jDependencies

看起来ParaRPr实现了org.jvnet.jaxb2_commons中的Child我相信你的运行时环境缺少带有Child的jar

相关问题