ClassnotfoundException для одного класса, но не другой из того же пакета?

StackOverflow https://stackoverflow.com/questions/3719964

Вопрос

Я работаю над проектом Grails, и я положил файл .jar в каталоге проекта lib.

Я продолжаю получать исключение времени выполнения для ClassnotFoundException в одном из моих файлов Java, которые я использую в проекте Grails.

У меня есть метод, определенный как таковой:

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 -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
Это было полезно?

Решение

DOCX4J имеет ряд зависимостей, как описано здесь: http://dev.plutext.org/trac/docx4j/wiki/docx4jdependonds.

Похоже, PararPr реализует ребенка, который находится в org.jvnet.jaxb2_commons, я считаю, что ваша среда выполнения отсутствует в банке, который имеет ребенка

Другие советы

YouLD может пропустить банку, на которой зависит docx4j.jar.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top