如何使用JDK8从(JAXB)注释的Java类生成XML模式文件

如何使用JDK8从(JAXB)注释的Java类生成XML模式文件,jaxb,java-8,Jaxb,Java 8,Java API文档中建议的通过运行“schenagen”生成模式的说明适用于JDK7,但不适用于JDK8 以下是文档页面: 以下是本页的一行,其中包含指向说明的链接: " 正在运行架构生成器(schemagen):, " 架构生成器无法工作,因为某些类已从JDK8中删除: “java.lang.ClassNotFoundException:com.sun.mirror.apt.AnnotationProcessorFactory” 这里还建议了另一种解决方案: 此解决方案也适用于JDK7,

Java API文档中建议的通过运行“schenagen”生成模式的说明适用于JDK7,但不适用于JDK8

以下是文档页面:

以下是本页的一行,其中包含指向说明的链接:

" 正在运行架构生成器(schemagen):, "

架构生成器无法工作,因为某些类已从JDK8中删除: “java.lang.ClassNotFoundException:com.sun.mirror.apt.AnnotationProcessorFactory”

这里还建议了另一种解决方案:

此解决方案也适用于JDK7,但不适用于JDK8;这将导致类似的错误:

“类未找到com/sun/tools/apt/Main.Class”

根本原因可能是相同的:注释处理工具已从JDK8中删除。 这一变化早在JEP 117中就计划好了:


现在如何使用JDK8从(JAXB)注释的Java类生成XML模式文件?

您可以使用
JAXBContext
上的
generateSchema
方法生成XML模式:

这是“jaxb2 maven插件”中的一个bug。您必须使用1.6或更高版本的插件

       <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <goals>
                        <goal>schemagen</goal>
                    </goals>
                    <phase>generate-resources</phase>
                    <configuration>
                        <includes>
                            <include>com/projectname/model/*.java</include>
                        </includes>
                        <outputDirectory>${project.build.directory}/schemas</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

org.codehaus.mojo
jaxb2 maven插件
1.6
schemagen
产生资源
com/projectname/model/*.java
${project.build.directory}/schemas

我在这个OTN线程上也提出了同样的问题:我正在研究JAXB的替代方案:我根据Marco的建议找到了解决方案。谢谢。即使使用JDK8,此路径看起来也很有希望。有没有关于如何在Maven pom文件中调用此方法的建议?是否有一个Maven插件基于调用此方法而不使用APT?使用2.2版我可以使schemagen正常工作。建议的1.6版本打印了一条消息,表明源未更改,跳过了架构生成。是的,使用1.6是有效的。(似乎1.5不适用于Java8)。谢谢。