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

相关问题