簡體   English   中英

抑制JAXB生成的類的編譯器警告

[英]Suppress compiler warnings on JAXB generated classes

這可能是這個問題的重復( 避免編譯器對xjc生成的代碼的警告 ),但由於我不太熟悉XJC / JAXB自定義綁定的特性,我可能會認為我可能誤解了上述問題。

我的問題似乎很簡單 - 如何將@SuppressWarnings("all")注釋添加到生成的JAXB類中? 我們的項目有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並添加這種塊

<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答案的補充。

我想從這個問題中解決以下幾點。

  1. 來自Atlassian的JAXB2 Basics框架/項目的Annox插件(根據示例,似乎可以完成這項工作,但是添加一個完整的框架和數百KB的代碼只是為了向一堆類添加簡單的注釋?真的嗎?),

我只需要添加一些注釋:

  • 首先,這不是“Atlassian”的框架/項目。 我既不是員工,也不是Atlassian,Sun或Oracle的附屬機構(盡管我是Sun / Oracle的正式撰稿人)。 這是一個獨立的開源項目,不是由任何公司驅動的。
  • 接下來, jaxb2-annotate-plugin被移動到一個獨立項目 ,它不再是JAXB2 Basics的一部分。 它太大了,應該是一個獨立的東西。
  • 關於“整個框架和數百KB的代碼”。
    • jaxb2-annotate-plugin不需要或為代碼添加任何運行時依賴項 如果注釋具有運行時保留,則在運行時需要注釋的類,但這應該是顯而易見的。
    • jaxb2-annotate-plugin確實有許多編譯時依賴,比如 ,它用於解析Java語法中的注釋。 嗯,這是因為插件必須執行許多適度高級的操作,例如從Java語法解析注釋並將它們為代碼以添加到生成的代碼中。 我個人認為編譯時沒有幾百個問題就完全沒問題了。

所以,從我的觀點來看,@ ToYonos提供了一個合理的解決方法


現在,正確的修復如何?

  • 正確的解決方法是修復XJC。 其他一切只是一種解決方法。
  • 這個問題有JAXB-1053問題。 Iaroslav正確地指出,只要必須支持1.6 ,就不能應用鑽石修復。
  • CodeModel也必須更新以支持Java 7+構造。
  • 您可以通過在GitHub上分叉和提供PR到XJC代碼來提供幫助。 但是我不能說PR確實應用了。 有三個我的PR 正在籌備中 ,已經有一個月左右了。
  • 可以編寫一個XJC插件來覆蓋代碼生成。 這不容易但可能。

正確的修復看起來不是一件容易的事,我選擇了一種解決方法,等待供應商修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM