我是XML Schema和JAXB的新手,想知道使用Maven JAXB插件(http://static.highsource.org/mjiip/maven-jaxb2-plugin/generate-mojo.html)的最佳或预期方法是什么。
我有一个简单的XML文档格式,我已经为其定义了一个模式。我主要感兴趣的是将兼容的XML文件读入Java,但我可能还想为POJO添加额外的属性,这些属性不在XML中,但会在运行时使用。
默认情况下,插件会将生成的代码放入$ {project.build.directory} / generated-sources / xjc。我想我想要做的是将生成的代码复制到/ src / main / java / whatever中,然后添加/修改代码以添加我的额外属性。当我更改架构时,我会将新生成的POJO中的更改合并到我自己的POJ中。
另一种方法是告诉插件将生成的源直接放入/ src / main / java,并且可能将POJO子类化以添加我自己的属性,但我不确定是否仍可以编组或解组使用我的扩展课程。
任何人都对哪种方法更正常或每种方法的缺陷有什么指导?
答案 0 :(得分:2)
在你的位置,我将生成的源保留在原来的位置,以便Maven可以构建相应的jar而无需进一步配置,并将自定义代码放在依赖于第一个的不同项目中。这确保了所有内容都以正确的顺序构建。
您可以选择是从生成的类派生还是仅在代码中使用它们的实例,作为属性,或者更好的是局部变量。就个人而言,我会避免推导;毕竟JAXB只是用于以特定格式执行I / O的低级机器。
最重要的是:忘记修改生成的来源;为什么当你可以自动获得相同的效果时,在开发过程中引入一个容易出错的手动步骤?
答案 1 :(得分:1)
(对Nicola的回答略有不同)
如果您的架构很少更改,那么有一个完全独立的构建可能是有意义的,它只是创建JAXB生成的代码,jars it,对其进行版本化,并将其粘贴到您的存储库中。
然后在您的下游代码中,您将该jar用作依赖项,并根据需要为JAXB代码创建子类以添加新字段。
我们选择了这条路线是因为我们觉得每次进行构建时都有JAXB complile是不必要的,因为我们的模式非常静态。
最重要的是:忘记修改生成的来源;为什么当你可以自动获得相同的效果时,在开发过程中引入一个容易出错的手动步骤?
绝对
答案 2 :(得分:0)
详细阐述并扩展已经做得很好的一点...如果有很多隐式关系和你想在JAXB代码上放置“getters”的东西,请抓住子弹并包装JAXB类在一个完全符合您想要的地方的层次结构。
使用IDE辅助委派,这只是一点点单调乏味,并且会影响主应用程序中许多简单,分散注意力,低级别的代码。
这样做的另一个好处是,您可以花费更少的时间来对抗JAXB以完全按照您想要的方式生成内容 - 包装器将使您的关注度降低很多。