Maven JAXB codegen 中に DTMManagerDefault を DTMManager にキャストするときに ClassCastException が発生する

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

質問

JAXB codegen を実行するために jaxb2 プラグインを使用する Maven ビルドを実行しようとすると、奇妙な問題が発生します (下記のスタックトレースを参照)。私が推測できる限りでは、xalan-2.7.1 とは異なる JAR からクラスロードされている DTMManager の実装が存在するということです。ただし、jaxb:generate ゴールの実行に使用されるクラスパスには、DTMManager または DTMManagerDefault を含む xalan-2.7.1.jar が 1 つだけあることを確認しました。そのため、他に何が妨げになっているのかわかりません。 。

最後のデータポイント:私たちのビルドでは「スナップショット」プロファイルを指定していますが、これは実際にはソースを (maven-source-plugin を使用して) JAR アップし、アーティファクトとして公開することのみを目的としています。上で説明した失敗のシナリオ のみ このプロファイルがデフォルトに加えて指定された場合に発生します。

Linux x64 (Fedora 13) 上の Sun の 64 ビット JDK 1.6.0_21 上で動作する Maven 2.2.1 を使用しています。「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"
役に立ちましたか?

解決

解決策は、クラスパス内の 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

他のヒント

Mavenの中にxalanxercesImpl依存関係を除外するには:

    <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 をも参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top