[英]Suppress compiler warnings on JAXB generated classes
这可能是这个问题的重复( 避免编译器对xjc生成的代码的警告 ),但由于我不太熟悉XJC / JAXB自定义绑定的特性,我可能会认为我可能误解了上述问题。
我的问题似乎很简单 - 如何将@SuppressWarnings("all")
注释添加到生成的JAXB类中? 我们的项目有0个警告政策,在JAXB生成步骤之后,我们最终会发出350多个警告,这些警告只是可怕的噪音。
我希望XJC上有一个简单的标志,或者至少提供这样的信息的简单方法,但我找不到任何。
从我在旅行中看到的情况来看,人们会做以下事情之一:
以前,我们通过在单独的Eclipse项目中推送与XML相关的代码然后禁用项目上的警告/错误来解决这个问题。 现在,作为代码整合/重构的一部分,我们已经重新调整了一些东西,不再拥有这种奢侈品。
对于这样一个看似微不足道的问题,真的没有优雅的解决方案吗? 任何反馈/想法都非常感谢。
FWIW,我们的项目使用Ant作为构建系统。
你必须使用这个插件: jaxb2-annotate-plugin
2解决方案:
1 - 修改你的xsd并添加这种块
<xsd:element name="foobar" type="xsd:string">
<xsd:annotation>
<xsd:appinfo>
<annox:annotate>@java.lang.SuppressWarnings("all")</annox:annotate>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
2 - 创建自定义绑定
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:annox="http://annox.dev.java.net"
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
jaxb:extensionBindingPrefixes="xjc annox"
version="2.1">
<jaxb:bindings schemaLocation="schema.xsd" node="/xs:schema">
<annox:annotate target="class">@java.lang.SuppressWarnings("all")</annox:annotate>
</jaxb:bindings>
</jaxb:bindings>
免责声明 :我是@ToYonos答案中提到的jaxb2-annotate-plugin的作者。
这不是一个独立的答案,而是@ToYonos答案的补充。
我想从这个问题中解决以下几点。
- 来自Atlassian的JAXB2 Basics框架/项目的Annox插件(根据示例,似乎可以完成这项工作,但是添加一个完整的框架和数百KB的代码只是为了向一堆类添加简单的注释?真的吗?),
我只需要添加一些注释:
jaxb2-annotate-plugin
被移动到一个独立项目 ,它不再是JAXB2 Basics的一部分。 它太大了,应该是一个独立的东西。 jaxb2-annotate-plugin
不需要或为代码添加任何运行时依赖项 。 如果注释具有运行时保留,则在运行时需要注释的类,但这应该是显而易见的。 jaxb2-annotate-plugin
确实有许多编译时依赖,比如javaparser ,它用于解析Java语法中的注释。 嗯,这是因为插件必须执行许多适度高级的操作,例如从Java语法解析注释并将它们转换为代码模型以添加到生成的代码中。 我个人认为编译时没有几百个问题就完全没问题了。 所以,从我的观点来看,@ ToYonos提供了一个合理的解决方法 。
现在,正确的修复如何?
1.6
,就不能应用钻石修复。 正确的修复看起来不是一件容易的事,我选择了一种解决方法,等待供应商修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.