【问题标题】:Expected or Recommended usage of the Maven JAXB 2.x PluginMaven JAXB 2.x 插件的预期或推荐用法
【发布时间】:2011-07-22 13:17:22
【问题描述】:

我是 XML Schema 和 JAXB 的新手,想知道使用 Maven JAXB 插件的最佳或预期方法是什么 (http://static.highsource.org/mjiip/maven-jaxb2-plugin/generate-mojo.html)is。

我有一个简单的 XML 文档格式,我已经为其定义了一个模式。我主要对将兼容的 XML 文件读入 Java 感兴趣,但我可能还想向 POJO 添加额外的属性,这些属性不会在 XML 中,但会在运行时使用。

默认情况下,插件将生成的代码放入 ${project.build.directory}/generated-sources/xjc。我想我想要做的是将生成的代码复制到 /src/main/java/whatever 并添加/修改代码以添加我的额外属性。当我更改架构时,我会将新生成的 POJO 中的更改合并到我自己的中。

另一种方法是告诉插件将生成的源直接放入 /src/main/java 并可能将 POJO 子类化以添加我自己的属性,但我不确定是否仍然可以进行编组/解组使用我的扩展类。

任何人对哪种方法更正常或每种方法的陷阱有什么指导?

【问题讨论】:

    标签: maven xsd jaxb


    【解决方案1】:

    在您的位置,我会将生成的源代码保留在原处,以便 Maven 无需进一步配置即可构建相应的 jar,并将您的自定义代码放在依赖于第一个项目的不同项目中。这可确保一切都以正确的顺序构建。

    您可以选择是从生成的类派生,还是仅在代码中使用它们的实例,作为属性,或者更好的是局部变量。我个人会避免推导;毕竟 JAXB 只是用于以特定格式执行 I/O 的低级机制。

    最重要的是:忘记修改生成的源;既然可以自动获得相同的效果,为什么还要在开发过程中引入容易出错的手动步骤?

    【讨论】:

    • 非常感谢,这是我的第一个 Stack Overflow 问题,有一些实际经验来指导我非常有用。我将看看对生成的文件进行子类化,看看我是否可以让它工作。我也可以使用带有默认值的模式属性来生成具有我需要的字段的类,这将使我不必对生成的源进行子类化。
    【解决方案2】:

    (对 Nicola 的回答稍作改动)

    如果您的架构很少更改,那么拥有一个完全独立的构建可能是有意义的,它只是创建 JAXB 生成的代码、对其进行 jar 化、对其进行版本化并将其粘贴到您的存储库中。

    然后在您的下游代码中使用该 jar 作为依赖项,并根据需要对 JAXB 代码进行子类化以添加新字段。

    我们走这条路是因为我们觉得每次构建时都编译 JAXB 是不必要的,因为我们的架构是相当静态的。

    最重要的是:忘记修改生成的源;既然可以自动获得相同的效果,为什么还要在开发过程中引入容易出错的手动步骤?

    绝对的。

    【讨论】:

    • 感谢 Roy,我喜欢将生成作为一个单独的项目运行的想法。预计 Schema 的变化会非常缓慢,因此它可能是合适的。
    【解决方案3】:

    详细说明和扩展一个已经很好的观点......如果有很多隐式关系和你想在 JAXB 代码上放置“getter”的东西,咬紧牙关并包装 JAXB 类层次结构合二为一,在你想要的地方做你想做的事。

    使用 IDE 辅助委派,这只是有点乏味,并且会从您的主应用程序中排除大量直接、分散注意力的低级代码。

    这样做的另一个好处是,您将花费更少的时间与 JAXB 抗争以完全按照您想要的方式生成东西 - 包装器将使您的关心大大减少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      相关资源
      最近更新 更多