【问题标题】:"http://annox.dev.java.net" customizations require the "-Xannotate" switch“http://annox.dev.java.net”自定义需要“-Xannotate”开关
【发布时间】:2014-12-13 08:13:43
【问题描述】:

我正在尝试通过 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>  

第二次编辑:

我在pom.xml 中添加了@lexicore 的建议,但结果是null pointer exception,您可以阅读by clicking on this link。为了促进其他人更容易使用hyperjaxb,我将完整的当前pom.xmlat this link包括在内。一起,这个修改后的pom.xml 和上面的 zip 文件足以在几分钟内重现问题。这是配置问题还是错误?

【问题讨论】:

  • 用户链接到他的代码示例(而不是在问题本身中提供它们),现在所有链接都已损坏。这与“寻求调试帮助的问题必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码”有关。

标签: java jaxb xsd hyperjaxb annox


【解决方案1】:

为了新用户的兴趣,我现在将回答这个具体问题。

如果您看到报告的错误:

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 以相同的方式使用。这是来自Hyperjaxb testsan example

        <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 自动包含。)

【讨论】:

  • 这会在我的机器上产生一个空指针异常。请参阅我对上面原始帖子的第二次编辑,以了解如何在几分钟内重新创建错误。空指针异常是配置问题的结果吗?或者它是一个错误?
  • @CodeMed 正如我在这里明确说过的stackoverflow.com/a/26392872/303810(在您删除 NPE 堆栈跟踪之前)this(与大多数其他事情不同)确实看起来像一个错误,并且不是配置问题。如果它是一个错误,我将有兴趣解决它。请在此处归档 github.com/highsource/hyperjaxb3/issues 并提供用于重现它的架​​构,并明确声明 (a) 这是您的代码,(b) 这是您对 Hyperjaxb 项目的贡献,以及 (c) 您将所有权利转让给该项目.否则我不会接受。
【解决方案2】:

你应该删除这个插件&lt;artifactId&gt;maven-hyperjaxb3-plugin&lt;/artifactId&gt;

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

【讨论】:

    【解决方案3】:

    考虑一下我必须在上一个问题中添加到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 注释,您可以使用 Hyperjaxb 或 jaxb2-annotate-plugin。同时做这两件事是完全错误的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      相关资源
      最近更新 更多