maven-jaxb2-plugin:如何在pom.xml中完成这个xjc命令行?

时间:2014-11-19 20:08:52

标签: maven jaxb xjc maven-jaxb2-plugin

由于我需要编译的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文件。

1 个答案:

答案 0 :(得分: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]

注意:

  • 不要忘记<schemaIncludes/>,否则src/main/resources/*.xsd将默认包含在内。
  • <strict>false</strict>为您提供-nv
  • 您始终可以args / arg在低级别配置xjc,但我不会推荐它。