将文件生成到另一个包pom.xml中

时间:2018-07-23 13:02:28

标签: java xml maven xsd jaxb

以下是我的文件夹层次结构:

|-src
|  |-main
|  |  |-java
|  |  |  |-pt.thales.attracktive.communication
|  |  |  |  |-pojo
|  |  |  |  |  |-...
|  |  
|  |-resources
|  |  |-...
|
|-target
|  |-generate-sources
|  |  |-xjc
|  |  |  |-uk.org.siri.siri
|  |  |  |  |-...

我正在将.xsd文件生成为.java。通常,它们将定位到target / generate-sources / xjc / uk.org.siri.siri,但我能够将它们发送到src / main / java / pt.thales.communication / attracktive.communication / pojo。问题在于它们与软件包名称uk.org.siri.siri一起使用,从而产生了冲突。我希望在代码中更新程序包名称,但这取决于.xsd

中的内容。
<xs:schema xmlns:tns="http://www.siri.org.uk/siri" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.siri.org.uk/siri" xmlns:xs="http://www.w3.org/2001/XMLSchema">

如何在pom.xml中进行更改?

1 个答案:

答案 0 :(得分:0)

有一种方法可以在pom.xml中配置目标软件包名称,但我不建议这样做。因为它为所有配置一个目标程序包-当您遵循“ 1:1名称空间:程序包”逻辑时,JAXB会更好地工作。

我建议使用绑定文件。

如果您使用的是,只需在bindings.xjb中创建一个名为*.xjb(或任何带有src/main/resources的文件)。内容如下:

<jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <jaxb:bindings schemaLocation="schema.xsd" node="/xs:schema">
        <jaxb:schemaBindings>
            <jaxb:package name="com.acme.foo"/>
        </jaxb:schemaBindings>
    </jaxb:bindings>

</jaxb:bindings>

schemaLocation必须指向您架构的架构文件之一。 jaxb:package/@name定义目标软件包名称。

如果您有多个命名空间,请创建一个单独的jaxb:bindings(每个命名空间分别使用jaxb:schemaBindings/jaxb:package。将schemaLocation指向使用特定命名空间的某些模式文件。

我不建议将多个名称空间映射到一个程序包上,这通常会导致问题。