我正试图通过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.我在googled上搜索了这个错误消息,并阅读了关于它的其他帖子,但是没有找到任何清晰的说明来解决它。我发现的最接近的是这篇文章,它说是is activated by the -Xannotate command-line argument插件。
我阅读了此链接,但是在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文件,包括预期的模式。要重现问题,只需将命令行导航到解压缩项目的根目录,然后键入mvn clean install来再现错误。
如何解决此错误?
编辑:
我已经尝试过在pom.xml中添加以下插件配置,但到目前为止还没有成功。
<args>
<arg>-Xannotate</arg>
</args> 第二次编辑:
我向pom.xml添加了@lexicore的建议,但结果是一个null pointer exception,您可以阅读单击此链接。为了促进其他人更容易地使用hyperjaxb,我包括了完整的当前pom.xml 在这个链接上。再加上这个修改后的pom.xml和上面的压缩文件,就足以在几分钟内重新创建这个问题了。这是配置问题还是bug?
发布于 2014-10-17 18:40:00
您应该删除这个插件<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>发布于 2014-10-17 19:43:47
为了新用户的利益,我现在将回答这个具体问题。
如果您看到报告的错误:
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试验
<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已经自动包含了它。)
发布于 2014-10-17 19:36:33
考虑一下我在上一个问题中必须添加到Xstian的回答中的警告:
警告 这个解决方案根本不使用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,因为它是正确的标签。安诺克斯是jaxb2-annotate-plugin后面的库,annox标记通常与像您这样的jaxb2-annotate-plugin-related问题相关联。
https://stackoverflow.com/questions/26430199
复制相似问题