抑制JAXB生成的类上的编译器警告

这可能是这个问题的重复( 避免编译器对xjc生成的代码的警告 ),但由于我不太熟悉XJC / JAXB自定义绑定的特性,我可能会认为我可能误解了上述问题。

我的问题看起来很简单 – 如何在生成的JAXB类中添加@SuppressWarnings("all")注释? 我们的项目有0个警告政策,在JAXB生成步骤之后,我们最终会发出350多个警告,这些警告只是可怕的噪音。

我希望XJC上有一个简单的标志,或者至少是提供这些信息的简单方法,但我找不到任何。

从我在旅行中看到的情况来看,人们会做以下事情之一:

  1. @ lexicore的JAXB2 Annotate插件 ,根据示例,它似乎可以完成这项工作,但是添加一个完整的框架和数百KB的代码只是为了向一堆类添加简单的注释? 真??,
  2. 自定义JAXB绑定(我可能会弄错,但这看起来很神秘,我不完全确定它是否有可能以这种方式执行),
  3. 自定义ANT目标,它将在JAXB后生成搜索和替换,
  4. Eclipse 4+似乎可以选择过滤掉所选项目的警告,但出于各种历史/遗留原因,我们仍然坚持使用Eclipse 3.7.2(Indigo),
  5. 可以进行注释插入的自定义XJC插件(如其中一位评论者所建议的,请参见此处 ),
  6. 将所有生成的类放在JAR中,使JAR成为项目的依赖项,然后完全删除生成的代码。

以前,我们通过在单独的Eclipse项目中推送与XML相关的代码然后禁用项目上的警告/错误来解决这个问题。 现在,作为代码整合/重构的一部分,我们已经重新调整了一些东西,不再拥有这种奢侈品。

对于这样一个看似微不足道的问题,真的没有优雅的解决方案吗? 任何反馈/想法都非常感谢。

FWIW,我们的项目使用Ant作为构建系统。

你必须使用这个插件: jaxb2-annotate-plugin

2解决方案:

1 – 修改你的xsd并添加这种块

    @java.lang.SuppressWarnings("all")    

2 – 创建自定义绑定

    @java.lang.SuppressWarnings("all")   

免责声明 :我是@ToYonos答案中提到的jaxb2-annotate-plugin的作者。

这不是一个独立的答案,而是@ToYonos答案的补充。

我想从这个问题中提出以下几点。

  1. 来自Atlassian的JAXB2 Basics框架/项目的Annox插件(根据示例,似乎可以完成这项工作,但是添加一个完整的框架和数百KB的代码只是为了向一堆类添加简单的注释?真的吗?),

我只需要添加一些注释:

  • 首先,这不是“Atlassian”的框架/项目。 我既不是员工,也不是Atlassian或Sun或Oracle的附属机构(尽管我是Sun / Oracle的正式撰稿人)。 这是一个独立的开源项目,不是由任何公司驱动的。
  • 接下来, jaxb2-annotate-plugin被移动到一个独立项目 ,它不再是JAXB2 Basics的一部分。 它太大了,应该是一个独立的东西。
  • 关于“整个框架和数百KB的代码”。
    • jaxb2-annotate-plugin不需要或为代码添加任何运行时依赖项 。 如果注释具有运行时保留,则在运行时需要注释的类,但这应该是显而易见的。
    • jaxb2-annotate-plugin确实有许多编译时依赖,比如javaparser ,它用于解析Java语法中的注释。 嗯,这是因为插件必须执行许多适度高级的操作,例如从Java语法解析注释并将它们转换为代码模型以添加到生成的代码中。 我个人认为编译时没有几百个问题就完全没问题了。

所以,从我的观点来看,@ ToYonos提供了一个合理的解决方法


现在,正确的修复如何?

  • 正确的解决方法是修复XJC。 其他一切只是一种解决方法。
  • 这个问题有JAXB-1053问题。 Iaroslav正确地指出,只要必须支持1.6 ,就不能应用钻石修复。
  • CodeModel也必须更新以支持Java 7+构造。
  • 您可以通过在GitHub上分叉和提供PR到XJC代码来提供帮助。 但是我不能说PR确实应用了。 有三个我的PR 正在筹备中 ,已经有一个月左右了。
  • 可以编写一个XJC插件来覆盖代码生成。 这不容易,但可能。

正确的修复看起来不是一件容易的事,我选择了一种解决方法,等待供应商修复。

Interesting Posts