我如何告诉 Maven 不要忽略导入的 XSD 中的名称空间属性?
How do I tell Maven to not disregard namespace attribute in imported XSD?
我正在使用 mojohaus jaxb2-maven-plugin 从 xsd 模式文件中生成 Java 源。我的 pom.xml 看起来像这样:
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>
<executions>
<execution>
<id>xjc-1</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<packageName>my.first.package.types</packageName>
<sources>
<source>src/main/java/META-INF/wsdl/firstSchema.xsd</source>
</sources>
</configuration>
</execution>
<execution>
<id>xjc-2</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<packageName>my.second.package.types</packageName>
<sources>
<source>src/main/java/META-INF/wsdl/secondSchema.xsd</source>
</sources>
<clearOutputDir>false</clearOutputDir>
</configuration>
</execution>
</executions>
<configuration>
<outputDirectory>src/main/javagen</outputDirectory>
</configuration>
</plugin>
此插件配置应与找到的 here 相对应。
当我 运行 构建时,第一个模式生成的源文件 也 放入第二个包中。谁能向我解释为什么会这样?这是一个错误还是我遗漏了什么?
非常感谢任何输入!
编辑:
我也尝试了 maven-jaxb2-plugin。同样的结果!所以这似乎是一个普通的 maven 问题。我的maven-jaxb2-plugin插件配置如下:
...
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>
<executions>
<execution>
<id>first</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaIncludes>
<include>firstSchema.xsd</include>
</schemaIncludes>
<generatePackage>my.first.package.types</generatePackage>
</configuration>
</execution>
<execution>
<id>second</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaIncludes>
<include>secondSchema.xsd</include>
</schemaIncludes>
<generatePackage>my.second.package.types</generatePackage>
</configuration>
</execution>
</executions>
<configuration>
<schemaDirectory>src/main/java/META-INF/wsdl</schemaDirectory>
<generateDirectory>src/main/javagen</generateDirectory>
</configuration>
</plugin>
有人有什么想法吗?这让我有点恼火...
编辑:
我发现这与某些 xsd 文件导入了如下文件有关:
<xs:import namespace="http://referenced/namespace"
schemaLocation="referencedSchema.xsd" />
在我看来,Maven 似乎忽略了名称空间标记。我怎样才能告诉 Maven 停止这样做?
我可以回答我自己很久很久以前的问题。问题是我们还使用了 maven jaxws 插件从 wsdl 文件生成 Web 服务。这两个插件实际上都采用底层 xsf 文件并为各自的包生成数据结构 类。所以解决方案是从 pom.xml 中删除 jaxb 插件。所有 xsds 只生成一次。
我正在使用 mojohaus jaxb2-maven-plugin 从 xsd 模式文件中生成 Java 源。我的 pom.xml 看起来像这样:
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>
<executions>
<execution>
<id>xjc-1</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<packageName>my.first.package.types</packageName>
<sources>
<source>src/main/java/META-INF/wsdl/firstSchema.xsd</source>
</sources>
</configuration>
</execution>
<execution>
<id>xjc-2</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<packageName>my.second.package.types</packageName>
<sources>
<source>src/main/java/META-INF/wsdl/secondSchema.xsd</source>
</sources>
<clearOutputDir>false</clearOutputDir>
</configuration>
</execution>
</executions>
<configuration>
<outputDirectory>src/main/javagen</outputDirectory>
</configuration>
</plugin>
此插件配置应与找到的 here 相对应。 当我 运行 构建时,第一个模式生成的源文件 也 放入第二个包中。谁能向我解释为什么会这样?这是一个错误还是我遗漏了什么?
非常感谢任何输入!
编辑:
我也尝试了 maven-jaxb2-plugin。同样的结果!所以这似乎是一个普通的 maven 问题。我的maven-jaxb2-plugin插件配置如下:
...
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>
<executions>
<execution>
<id>first</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaIncludes>
<include>firstSchema.xsd</include>
</schemaIncludes>
<generatePackage>my.first.package.types</generatePackage>
</configuration>
</execution>
<execution>
<id>second</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaIncludes>
<include>secondSchema.xsd</include>
</schemaIncludes>
<generatePackage>my.second.package.types</generatePackage>
</configuration>
</execution>
</executions>
<configuration>
<schemaDirectory>src/main/java/META-INF/wsdl</schemaDirectory>
<generateDirectory>src/main/javagen</generateDirectory>
</configuration>
</plugin>
有人有什么想法吗?这让我有点恼火...
编辑:
我发现这与某些 xsd 文件导入了如下文件有关:
<xs:import namespace="http://referenced/namespace"
schemaLocation="referencedSchema.xsd" />
在我看来,Maven 似乎忽略了名称空间标记。我怎样才能告诉 Maven 停止这样做?
我可以回答我自己很久很久以前的问题。问题是我们还使用了 maven jaxws 插件从 wsdl 文件生成 Web 服务。这两个插件实际上都采用底层 xsf 文件并为各自的包生成数据结构 类。所以解决方案是从 pom.xml 中删除 jaxb 插件。所有 xsds 只生成一次。