【问题标题】:maven-jaxb2-plugin: how to accomplish this xjc command-line in the pom.xml?maven-jaxb2-plugin:如何在 pom.xml 中完成这个 xjc 命令行?
【发布时间】:2014-11-19 20:08:51
【问题描述】:

由于我需要编译的 XSD 存在各种问题(在其他 SO 帖子中描述),我有一个绑定文件和一个本地扩展架构。以下命令行可以正常工作,但我无法找出正确的 pom.xml 配置来模仿这个:

xjc -nv src/main/resources/TCIP_4_0_0_Final.xsd src/main/resources/local/ObaCcLocationReport.xsd -b src/main/resources/local/rename.xjb -d target

主要是,我如何指定多个 XSD?我试过了:

<schemaDirectory>src/main/resources</schemaDirectory>
<schemaIncludes>
  <include>TCIP_4_0_0_Final.xsd</include>
  <include>local/ObaCcLocationReport.xsd</include>
</schemaIncludes>

但它似乎忽略了第二个include。

我还尝试了以下变化:

<schema>
  <fileset>
    <directory>src/main/resources</directory>
    <includes>
      <include>TCIP_4_0_0_Final.xsd</include>
      <include>local/ObaCcLocationReport.xsd</include>
    </includes>
  </fileset>
</schema>

没有成功。有什么建议吗?

编辑

这是一种解决方法,但并不理想:

由于ObaCcLocationReport.xsd 依赖于作为TCIP_4_0_0_Final.xsd 一部分编译的架构,我只需要确保它在之后 编译,并且它似乎按文件路径顺序处理文件。所以我将ObaCcLocationReport.xsd 放入x 子文件夹并将pom.xml 更改为:

<schemaDirectory>src/main/resources</schemaDirectory>
<schemaIncludes>
  <include>TCIP_4_0_0_Final.xsd</include>
  <include>x/ObaCcLocationReport.xsd</include>
</schemaIncludes>

这编译了架构并正确生成了 Java 文件。

【问题讨论】:

    标签: maven jaxb xjc maven-jaxb2-plugin


    【解决方案1】:

    免责声明:我是maven-jaxb2-plugin的作者。

    所以你的编译依赖于 XJC 命令中模式文件的顺序?嗯,有趣。为什么?

    这种情况请发mvn -X clean generate-sources登录。

    看起来 Maven 并没有像我得到的那样维护文件模式的顺序:

    schemas=[file:/.../src/main/resources/local/ObaCcLocationReport.xsd,
             file:/.../src/main/resources/TCIP_4_0_0_Final.xsd]
    

    这不是你想要的。可以修复,请file an issue。 (我在这里依赖其中一个 Maven 库,但可以用不同的方式来维护顺序。)

    你可以这样配置:

    <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <executions>
            <execution>
                <id>generate</id>
                <goals>
                    <goal>generate</goal>
                </goals>
                <configuration>
                    <strict>false</strict>
                    <schemaIncludes/>
                    <schemas>
                        <schema>
                            <fileset>
                                <includes>
                                    <include>TCIP_4_0_0_Final.xsd</include>
                                </includes>
                            </fileset>
                        </schema>
                        <schema>
                            <fileset>
                                <includes>
                                    <include>local/ObaCcLocationReport.xsd</include>
                                </includes>
                            </fileset>
                        </schema>
                    </schemas>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    给你:

    schemas=[file:/.../src/main/resources/TCIP_4_0_0_Final.xsd,
             file:/.../src/main/resources/local/ObaCcLocationReport.xsd]
    

    注意事项:

    • 不要忘记&lt;schemaIncludes/&gt;,否则默认情况下会包含src/main/resources/*.xsd。
    • &lt;strict&gt;false&lt;/strict&gt; 给你-nv。
    • 你总是可以通过args/arg在低级别配置xjc,但我不建议这样做。

    【讨论】:

    • 不,抱歉,我不清楚:它似乎是按文件系统顺序处理它们,忽略它们在pom.xml 中呈现的顺序。我会尝试完全独立的 &lt;schema&gt; 元素,谢谢。
    猜你喜欢
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多