【问题标题】:XJC JAXB XSD handling with Java 11使用 Java 11 处理 XJC JAXB XSD
【发布时间】:2021-01-07 09:09:20
【问题描述】:

我们有一个基于 Java 11 的 maven 项目,在我们的源代码中,我们确实有一个包含由 xjc 生成的类的包。一旦我们修改了 XSD 文件,我们就运行 xjc 并将类复制到我们的项目中以访问新字段。这工作正常,但是随着项目的增长,我们得到越来越多的 XSD 文件,并且使用 xjc 的过程不是很直观。此外,xjc 不再是 java 11 Adopt JDK 的一部分,因此我们必须使用旧的 java 8 oracle jdk 才能使用 xjc。

我们的另一个选择是使用 maven 插件。但我想知道,这是否适用于我们的项目设置。因为插件是在安装阶段执行的,所以类只会在这个阶段(或者它设置的任何阶段)生成。所以这些类只有在运行完这个阶段后才可用。

这意味着如果我更改 XSD,我将新的 XSD 复制到我的项目中,运行 mvn install,然后在 IntelliJ 中更新我的源,然后我可以访问新字段?

或者是在一个单独的 Maven 项目中管理 XSD 并将该项目配置为您自己的主项目中的依赖项的通常过程?一旦 XSD 发生更改,我是否会有新版本的依赖项,我是否必须在 pom.xml 中对其进行调整?

我想知道哪种方式在这里有意义。

【问题讨论】:

    标签: java maven xsd jaxb


    【解决方案1】:

    你的问题有几个误解,我想纠正它们:

    • 您不需要 Java 8 来使用 XJC,因为该工具在 Maven 上的 com.sun.xml.bindorg.glassfish.jaxb 组中都可用(后者将其依赖项拆分为多个 jar)。如果您想在 Java 11 上使用 JAXB,则必须在您的软件中包含 jaxb-impljaxb-runtime
    • jaxb2-maven-plugin 不在install 阶段运行,而是在generate-sources 阶段运行,该阶段在compile 阶段之前(参见Lifecycles Reference)。

    您是决定在外部运行 XJC 还是通过 Maven 运行主要取决于您的开发风格。

    只有当生成的代码变得相当大时,我才会将生成的代码拆分到另一个项目中:例如每当生成的代码量(永远不会被手动修改)开始减慢 Eclipse 的启动速度时,我们就会将其迁移到另一个项目中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多