我有一个这样的架构层次结构:
common |---legacy | |---legacy.xsd xmlns="http://common/legacy" | |---other.xsd xmlns="http://common/legacy" | '---....xsd xmlns="http://common/legacy" |---send |---file.xsd xmlns="http://common/send" '---text.xsd xmlns="http://common/send" '---....xsd xmlns="http://common/send"
一个文件夹中的所有文件都具有相同的命名空间。
现在,我想将名称空间映射到特定的Java包(我不能更改名称空间)。
我找到了将架构绑定到程序包的解决方案。但是然后我必须为每个xsd文件创建一个条目:
<jaxb:bindings schemaLocation="./common/legacy/legacy.xsd"> <jaxb:schemaBindings> <jaxb:package name="com.company/legacy"/> </jaxb:schemaBindings> </jaxb:bindings> <jaxb:bindings schemaLocation="./common/legacy/other.xsd"> <jaxb:schemaBindings> <jaxb:package name="com.company/legacy"/> </jaxb:schemaBindings> </jaxb:bindings> .....
有没有一种方法可以直接定义名称空间和程序包名称之间的绑定?
另一种方法是在maven中定义包:
<plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <configuration> <generatePackage>com.company/legacy</generatePackage> </configuration> </plugin>
但是然后我必须为每个文件夹创建一个执行,这并不是我真正想要的。
免责声明: 我是的作者maven-jaxb2-plugin。
maven-jaxb2-plugin
XJC从名称空间派生软件包,因此(通常)您不能为一个名称空间生成多个软件包。有一些技巧,jaxb:class/@ref但是您不想要这些技巧,因为这可能导致各种碰撞。
jaxb:class/@ref
因此,我的建议是定义多个执行,在同一名称空间中每个不同的模式执行一个。generatePackage尽管我通常建议在绑定中定义包映射,但是您可以使用。
generatePackage
当执行多个执行时,请确保generateDirectory每个执行使用不重复。
generateDirectory
顺便说一句,为什么您不习惯多重绑定?