" HTTP://annox.dev.java.net"自定义需要" -Xannotate"开关

时间:2014-10-17 17:19:22

标签: java jaxb xsd hyperjaxb annox

我试图通过hyperjaxb运行一个真正的架构。我已经使用jaxb重复测试了模式,并且jaxb每次都正确地导入模式。但是,当我尝试使用hyperjaxb从同一模式生成带有hibernate注释的java类时,我收到以下错误:

[ERROR] Error while parsing schema(s).Location [ file:/C:/path/to/src/main/resources/schema.xsd{4,32}].
org.xml.sax.SAXParseException; systemId: file:/C:/path/to/src/main/resources/schema.xsd;  
lineNumber: 4; columnNumber: 32; 
Using "http://annox.dev.java.net" customizations requires the "-Xannotate" switch 
to enable this plug-in.

我已经搜索了此错误消息并阅读了有关它的其他帖子,但没有找到任何解决它的干净说明。我找到的最接近的是this article,它表示annox插件is activated by the -Xannotate command-line argument

我读了this link,但是将以下内容添加到xsd文件并没有消除错误,可能是因为xsd在任何地方都没有使用jaxb前缀。

xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1" 
xmlns:annox="http://annox.dev.java.net" 
jaxb:extensionBindingPrefixes="annox"

我上传了一个包含所有相关资料的zip文件,以便快速重现问题to this link。它是项目的zip文件,包括预期的架构。要重现问题,您只需将命令行导航到解压缩项目的根目录,然后键入mvn clean install即可重现错误。

如何解决此错误?


修改

我已经尝试在pom.xml中添加以下插件配置,但到目前为止还没有成功。

<args>
    <arg>-Xannotate</arg>
</args>  

第二次编辑:

我将@lexicore的建议添加到pom.xml,但结果是null pointer exception,您可以阅读by clicking on this link。为了促进其他人更轻松地使用hyperjaxb,我将包含最新的pom.xml at this link。同时,这个修订后的pom.xml和上面的zip文件足以在几分钟内重现问题。这是配置问题还是错误?

3 个答案:

答案 0 :(得分:2)

您应该删除此插件<artifactId>maven-hyperjaxb3-plugin</artifactId>

        <plugin>
            <groupId>org.jvnet.hyperjaxb3</groupId>
            <artifactId>maven-hyperjaxb3-plugin</artifactId>
            <version>0.6.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <extension>true</extension>
                <roundtripTestClassName>RoundtripTest</roundtripTestClassName>
            </configuration>
        </plugin>

答案 1 :(得分:2)

我现在将针对新用户的兴趣回答这个具体问题。

如果您看到报告的错误:

Using "http://annox.dev.java.net" customizations requires the "-Xannotate"
switch to enable this plug-in.

这意味着,您必须包含“-Xannotate”开关才能启用此插件。请参阅jaxb2-annotate-plugin的首页上的文档:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <configuration>
        <extension>true</extension>
        <args>
            <arg>-Xannotate</arg>
        </args>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2_commons</groupId>
                <artifactId>jaxb2-basics-annotate</artifactId>
            </plugin>
            <!-- Add the dependencies with your annotations as 'plugins' below -->
            <plugin>
                <groupId>org.jvnet.jaxb2_commons</groupId>
                <artifactId>jaxb2-annotate-plugin-test-annox-annotations</artifactId>
            </plugin>
        </plugins>
    </configuration>
</plugin>

请参阅-Xannotate开关?就是这样。

jaxb2-annotate-plugin可以与maven-hyperjaxb3-plugin相同的方式使用。这是来自an exampleHyperjaxb tests

        <plugin>
            <groupId>org.jvnet.hyperjaxb3</groupId>
            <artifactId>maven-hyperjaxb3-plugin</artifactId>
            <configuration>
                <postArgs>
                    <arg>-Xannotate</arg>
                </postArgs>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-search</artifactId>
                    <version>3.0.0.GA</version>
                </dependency>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-annotations</artifactId>
                    <version>3.5.6-Final</version>
                </dependency>
            </dependencies>
        </plugin>

(您无需加载jaxb2-annotate-plugin maven-hyperjaxb3-plugin,因为它已自动包含在{{1}}中。)

答案 2 :(得分:1)

请考虑在上一个问题中我必须添加到Xstian's answer的警告:

  

警告

     

此解决方法根本不使用Hyperjaxb。此解决方法使用jaxb2-annotate-plugin添加JPA注释。这是一项通常由Hyperjaxb执行的任务。

     

也就是说,如果您选择使用此解决方法,则完全退出Hyperjaxb轨道。如果使用Hyperjaxb,则不需要jaxb2-annotate-plugin,反之亦然,如果使用jaxb2-annotate-plugin添加注释,则不需要Hyperjaxb。

     

但要注意,jaxb2-annotate-plugin只能添加您在绑定文件中明确配置的注释,这是一项非常肤浅的任务。另一方面,Hyperjaxb对您的模式模型进行了非常深入和全面的分析,并自动生成合理的JPA注释。在某些情况下,Hyperjaxb甚至必须扩充生成的JAXB代码以使其与JPA兼容。这些功能超出了jaxb2-annotate-plugin的范围。

因此,如果任务是在模​​式派生类中生成JPA注释,则使用EITHER Hyperjaxb OR jaxb2-annotate-plugin。在同一时间做这两件事是完全错误的。

我已将此特定问题重新标记为annox,因为它是正确的标记。 Annoxjaxb2-annotate-plugin背后的库,annox代码通常与jaxb2-annotate-plugin相关联,与您的相关问题相关联。