Исключение ClassCastException при литье DTMManagerDefault в DTMManager в Мэйвен на JAXB что codegen
У меня возникла странная проблема при попытке запустить сборку maven, которая использует плагин jaxb2 для выполнения JAXB codegen (см. stacktrace ниже). Лучшее, что я могу понять, - это то, что существует некоторая реализация DTMManager, которая загружается из другого JAR, чем в xalan-2.7.1; однако я проверил, что путь к классу, который используется для запуска jaxb:generate goal, имеет только один xalan-2.7.1.jar, который содержит DTMManager или DTMManagerDefault-так что я понятия не имею, что еще может быть, это мешает.
Один заключительный пункт данных: наша сборка определяет профиль "snapshot", который на самом деле служит только для того, чтобы также создавать источники (используя Maven-source-plugin) и публиковать их как артефакты. Сценарий отказа, который я описал выше , только возникает, когда этот профиль задан в дополнение к умолчанию.
Я использую Maven 2.2.1, работающий на 64-битном JDK Sun 1.6.0_21 на Linux x64 (Fedora 13) - смотрите ниже stacktrace для информации' mvn-v'.
Любой идеи о том, в чем может заключаться проблема и/или как ее отладить? Это причиняло мне горе в течение последних нескольких дней, и теперь это блокирует прогресс : (
java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault cannot be cast to org.apache.xml.dtm.DTMManager
at org.apache.xml.dtm.DTMManager.newInstance(DTMManager.java:137)
at org.apache.xpath.XPathContext.<init>(XPathContext.java:102)
at org.apache.xpath.jaxp.XPathImpl.eval(XPathImpl.java:207)
at org.apache.xpath.jaxp.XPathImpl.evaluate(XPathImpl.java:281)
at com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:224)
at com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:289)
at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:134)
at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:96)
at com.sun.tools.xjc.reader.internalizer.DOMForest.transform(DOMForest.java:448)
at com.sun.tools.xjc.ModelLoader.buildDOMForest(ModelLoader.java:342)
at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:374)
at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:167)
at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:113)
at org.jvnet.jaxb2.maven2.XJC2Mojo.runXJC(XJC2Mojo.java:1119)
at org.jvnet.jaxb2.maven2.XJC2Mojo.execute(XJC2Mojo.java:720)
...
Mvn-v:
# mvn -v
Apache Maven 2.2.1 (r801777; 2009-08-06 14:16:01-0500)
Java version: 1.6.0_21
Java home: /usr/java/jdk1.6.0_21/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.33.3-85.fc13.x86_64" arch: "amd64" Family: "unix"
2 ответа:
Решение заключается в поиске всех зависимостей от Xalan и xercesImpl в пути к классу . Эти зависимости должны быть исключены.
Обновлено
Я нашел такой ответ-смотрите http://www.mail-archive.com/dev@qpid.apache.org/msg07295.html
Had a look at this closely and figured it was due to a classpath class due to Sun bundling an older version of Xalan jar. I have disabled this test until we come up with a decent solution. Rajith
Для исключения зависимостей
xalan
иxercesImpl
в Maven:<dependency> <!-- ClassNotFoundException: org.jaxen.dom.DOMXPath --> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> <version>1.1.3</version> <exclusions> <exclusion> <artifactId>maven-findbugs-plugin</artifactId> <groupId>maven-plugins</groupId> </exclusion> <exclusion> <artifactId>maven-cobertura-plugin</artifactId> <groupId>maven-plugins</groupId> </exclusion> <!-- ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault -> org.apache.xml.dtm.DTMManager --> <exclusion> <artifactId>xercesImpl</artifactId> <groupId>xerces</groupId> </exclusion> <exclusion> <artifactId>xalan</artifactId> <groupId>xalan</groupId> </exclusion> </exclusions> </dependency>
См. также https://community.jboss.org/wiki/FreeMarkerAndJBossAS7 .