Maven 如何定制JAXB2生成的package-info.java
我正在使用Maven 如何定制JAXB2生成的package-info.java,maven,jaxb2,Maven,Jaxb2,我正在使用 <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 从XSD文件生成Java类 我补充说 <args>-npa</args> -npa 因此,插件不再生成package-info.java,但是使用此选项
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
从XSD文件生成Java类
我补充说
<args>-npa</args>
-npa
因此,插件不再生成package-info.java,但是使用此选项生成的java类是不同的(命名空间被添加到每个元素)
因此,我无法使用package-info.java自定义名称空间
如何在不修改手动生成的文件的情况下使用自定义名称空间?您可以使用jaxb2公共项目中的名称空间前缀插件(免责声明:我编写了该插件):
这是一个xjc插件,允许在bindings.xml文件中定义名称空间->前缀映射:
您的pom.xml如下所示:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.0</version>
<configuration>
<schemaDirectory>src/main/resources</schemaDirectory>
<catalog>src/main/resources/catalog.xml</catalog>
<schemaIncludes>
<include>*.xsd</include>
</schemaIncludes>
<bindingDirectory>src/main/resources</bindingDirectory>
<bindingIncludes>
<include>bindings.xml</include>
</bindingIncludes>
<args>
<arg>-extension</arg>
<arg>-Xnamespace-prefix</arg>
</args>
</configuration>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-namespace-prefix</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
0.8.0
src/main/resources
src/main/resources/catalog.xml
*.xsd
src/main/resources
bindings.xml
-延伸
-XX名称空间前缀
生成
org.jvnet.jaxb2_commons
jaxb2名称空间前缀
1.0-快照
您可以通过引导JAX-B生成包info.java
并在XSD中设置所需的目标名称空间来定制名称空间
<xs:schema version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"
targetNamespace="yourTargetNameSpace"
xmlns="yourTargetNameSpace"
elementFormDefault="qualified">
如果我想覆盖@javax.xml.bind.annotation.XmlSchema(名称空间=”http://www.ech.ch/xmlns/eCH-0007/3“
到@javax.xml.bind.annotation.XmlSchema(namespace=“”
?如何做到这一点?@icedek,如果您更改xml名称空间,您就是在更改XSD的定义:即使xml结构保持不变,它们也不会兼容。如果您需要这样做,为什么不修改XSD本身?有人知道是否可以用jaxws maven插件实现同样的效果吗?@kovica对于jaxws maven插件,使用-B-Xnamespace-prefix
@Dojo在一个目录中拥有多个共享相同名称空间前缀的XSD,我想您必须为每个XSD重复绑定定义,每次都指定相同的前缀。但是我没有尝试过。对于使用目录作为schemaLocation的参数,我也没有尝试(一种通配符标准),它与jxb绑定的工作方式更相关,我真的不知道。如果您可以访问xsd,这是最简单的答案。
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.0</version>
<configuration>
<schemaDirectory>src/main/resources</schemaDirectory>
<catalog>src/main/resources/catalog.xml</catalog>
<schemaIncludes>
<include>*.xsd</include>
</schemaIncludes>
<bindingDirectory>src/main/resources</bindingDirectory>
<bindingIncludes>
<include>bindings.xml</include>
</bindingIncludes>
<args>
<arg>-extension</arg>
<arg>-Xnamespace-prefix</arg>
</args>
</configuration>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-namespace-prefix</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
<xs:schema version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"
targetNamespace="yourTargetNameSpace"
xmlns="yourTargetNameSpace"
elementFormDefault="qualified">