Плагин jaxb2 maven не работает при втором выполнении - PullRequest
4 голосов
/ 16 декабря 2011

У меня есть модульный проект, в котором для каждого модуля я использую плагин jaxb2-maven-plugin для компиляции файлов XSD с помощью xjc.Теперь предположим, что модули скомпилированы в порядке A -> B.Для A все работает нормально (т.е. я получаю * XsdImpl.java), но для BI получаем следующее:

[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

Оба модуля используют одинаковую конфигурацию для плагина:

<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>

Ошибка всегда возникает для второго модуля (не имеет значения, 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 выбирается во второй раз ...Или кто-нибудь уже сталкивался с такой же проблемой?

Заранее большое спасибо за любую подсказку / помощь!Bye

Ответы [ 2 ]

9 голосов
/ 31 января 2012

Проблема заключается в том, что вы непреднамеренно предоставили реализацию JAXP без API JAXP, которая несовместима с API JAXP, который связан с JRE.

Чтобы решить эту проблему, я добавил реализацию JAXP API +зависимости от всех плагинов jaxb2 в моем проекте:

            </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>

Не забудьте обновить все плагины jaxb2, а не только неисправные.Это связано с тем, что зависимости плагина разрешаются только один раз при первом запуске плагина.Это может быть или не быть модуль, в котором происходит сбой.

== РЕДАКТИРОВАТЬ ==

Имейте в виду, что начиная с Java 1.6, все необходимые JAXP, JAXB, xerces, xalan, JAX-WS RI, SAAJ и связанные с ними классы связаны в библиотеке JRE .

Вам не нужно для включения любого из этих deps в ваш проект, если только вы не 'повторная сборка с использованием архаичного JDK (1.5 или более поздней).

Итак, если вы удалите зависимости JAXB из вашего POM (и, возможно, обновите до последнего jaxb2-maven-plugin), ваша сборка, вероятно, будет работать нормально.1020 *

1 голос
/ 28 августа 2013

У меня была похожая проблема, и, изменив номер версии для нижеуказанного компилятора Maven с 1.9 до 3.1, работал для меня.В моем POM я сделал это изменение в 2 местах под плагинами ...

<artifactId>maven-compiler-plugin</artifactId>
  <version>3.1</version>
...