2011-12-16 16 views
3

私はモジュールごとにjaxb2-maven-pluginを使用してxjcでXSDファイルをコンパイルします。ここで、モジュールがA→Bの順番でコンパイルされたとします。すべてが正常に動作するために(つまり、私は* XsdImpl.javaを得る)が、BIを得るために、以下:jaxb2 mavenプラグインは2回目の実行時には機能しません

<plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>jaxb2-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>model</id> 
         <goals> 
          <goal>xjc</goal> 
         </goals> 

         <configuration> 
          <extension>true</extension> 
          <clearOutputDir>false</clearOutputDir> 
          <bindingDirectory>${basedir}/src/main/resources/xsd</bindingDirectory> 

          <outputDirectory>${basedir}/src/main/generated</outputDirectory> 
          <schemaDirectory>${basedir}/src/main/generated/xsd</schemaDirectory> 

          <schemaFiles>base.xsd</schemaFiles> 
          <staleFile>${project.build.directory}/generated-sources/jaxb/.staleFlag-model</staleFile> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

エラー:

[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:1.2:xjc (model) on project B: DTD factory class org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl does not extend from DTDDVFactory. -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:1.2:xjc (model) on project B: DTD factory class org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl does not extend from DTDDVFactory 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319) 
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
     at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: org.apache.maven.plugin.MojoExecutionException: DTD factory class org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl does not extend from DTDDVFactory. 
     at org.codehaus.mojo.jaxb2.XjcMojo.execute(XjcMojo.java:352) 
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
     ... 19 more 
Caused by: org.apache.xerces.impl.dv.DVFactoryException: DTD factory class org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl does not extend from DTDDVFactory. 
     at org.apache.xerces.impl.dv.DTDDVFactory.getInstance(Unknown Source) 
     at org.apache.xerces.impl.dv.DTDDVFactory.getInstance(Unknown Source) 
     at org.apache.xerces.impl.xs.opti.SchemaParsingConfig.<init>(Unknown Source) 
     at org.apache.xerces.impl.xs.opti.SchemaParsingConfig.<init>(Unknown Source) 
     at org.apache.xerces.impl.xs.traversers.XSDHandler.<init>(Unknown Source) 
     at org.apache.xerces.impl.xs.traversers.XSDHandler.<init>(Unknown Source) 
     at org.apache.xerces.impl.xs.XMLSchemaLoader.<init>(Unknown Source) 
     at org.apache.xerces.impl.xs.XMLSchemaLoader.<init>(Unknown Source) 
     at org.apache.xerces.impl.xs.XMLSchemaValidator.<init>(Unknown Source) 
     at org.apache.xerces.jaxp.validation.XMLSchemaValidatorComponentManager.<init>(Unknown Source) 
     at org.apache.xerces.jaxp.validation.ValidatorHandlerImpl.<init>(Unknown Source) 
     at org.apache.xerces.jaxp.validation.AbstractXMLSchema.newValidatorHandler(Unknown Source) 
     at com.sun.tools.xjc.SchemaCache.newValidator(SchemaCache.java:47) 
     at com.sun.tools.xjc.reader.xmlschema.bindinfo.AnnotationParserFactoryImpl$1$1.startElement(AnnotationParserFactoryImpl.java:136) 
     at com.sun.xml.xsom.impl.parser.state.NGCCRuntime.startElement(NGCCRuntime.java:214) 
     at org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:527) 
     at com.sun.tools.xjc.reader.ExtensionBindingChecker.startElement(ExtensionBindingChecker.java:271) 
     at org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:527) 
     at com.sun.tools.xjc.reader.xmlschema.parser.IncorrectNamespaceURIChecker.startElement(IncorrectNamespaceURIChecker.java:97) 
     at org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:527) 
     at com.sun.tools.xjc.reader.xmlschema.parser.CustomizationContextChecker.startElement(CustomizationContextChecker.java:172) 
     at org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:527) 
     at com.sun.tools.xjc.ModelLoader$SpeculationChecker.startElement(ModelLoader.java:427) 
     at org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:527) 
     at com.sun.tools.xjc.reader.internalizer.VersionChecker.startElement(VersionChecker.java:78) 
     at org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:527) 
     at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) 
     at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) 
     at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) 
     at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
     at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) 
     at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) 
     at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
     at org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) 
     at com.sun.xml.xsom.parser.JAXPParser.parse(JAXPParser.java:79) 
     at com.sun.tools.xjc.ModelLoader$2.parse(ModelLoader.java:451) 
     at com.sun.tools.xjc.ModelLoader$XMLSchemaParser.parse(ModelLoader.java:237) 
     at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.parseEntity(NGCCRuntimeEx.java:298) 
     at com.sun.xml.xsom.impl.parser.ParserContext.parse(ParserContext.java:87) 
     at com.sun.xml.xsom.parser.XSOMParser.parse(XSOMParser.java:147) 
     at com.sun.tools.xjc.ModelLoader.createXSOMSpeculative(ModelLoader.java:468) 
     at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:338) 
     at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:145) 
     at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:91) 
     at com.sun.tools.xjc.Driver.run(Driver.java:287) 
     at org.codehaus.mojo.jaxb2.XjcMojo.execute(XjcMojo.java:301) 
     ... 21 more 
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 

モジュールの両方がプラグインのために同じ設定を使用します2番目のモジュール(AまたはBのどちらでもかまいません)のために常に来ます。 私は舞台裏で何が起こるかを把握しようと多くの時間を費やしてきたが、残念ながら成功せず... は例えば、私はここで最初の実行時に何が起こるのかを理解したいと思います:

at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
    --->>> at org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:333) 

I org.apache.xerces.jaxp.SAXParserImplの代わりに別のクラスが使用されていると推測されますが、何とかorg.apache.xerces.jaxp.SAXParserImplが2回目に選択されています。これをどのように証明できますか?誰かがすでに同じ問題を経験したのですか?

事前にヒント/助けをいただきありがとうございます! さようなら

答えて

7

問題が誤ってそれがJREにバンドルされているJAXPのAPIと互換性がありません、JAXPのAPIなしJAXPの実装を提供してきたということです。

は、この問題を解決するために、私は私のプロジェクト内のすべてのJAXB2のプラグインに をJAXPのAPI +実装依存関係を追加しました:

  </executions> 
      <dependencies> 
       <dependency> 
        <groupId>xml-apis</groupId> 
        <artifactId>xml-apis</artifactId> 
        <version>1.3.04</version> 
       </dependency> 
       <dependency> 
        <groupId>xerces</groupId> 
        <artifactId>xercesImpl</artifactId> 
        <version>2.9.1</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

は1つだけ失敗していない、すべてのJAXB2のプラグインを更新することを忘れないでください。これは、初めてプラグインを実行したときにプラグインの依存関係が1回だけ解決されるためです。これは、障害が発生したモジュールであってもなくてもかまいません。

== EDITの==

は、Java 1.6以降、すべての必要なJAXP、JAXB、Xercesの、Xalanのは、JAX-WS RI、SAAJおよび関連するクラスは、JREライブラリにを同梱していることに注意してください。

お客様古風なJDK(1.5歳以上)でビルドしている場合を除き、はこれらのdepsをプロジェクトに含める必要はありません。

したがって、POMからJAXB依存関係を削除して(そして最新のjaxb2-maven-pluginにアップグレードすると)、ビルドはうまく動作します。

+0

これは、検索の多くを取り、これは最終的にも私のために同じエラーを解決するソリューションでした。 xercesの ' 2.11.0'を使用しています。私はxml-apisを省略でき、v1.4.01に解決しました – r1chjc

0

私は同様の問題を抱えていました。以下のMavenコンパイラのバージョン番号を1.9から3.1に変更してくれました。私のPOMでは、私は、プラグインの下の2箇所で、この変更をしていた...

<artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
関連する問題