方法是使用jaxb2-maven-plugin通过xsd生成java类。
pom:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<packageName>${project.groupId}.model</packageName>
<extension>true</extension>
<arguments>-b ${resource.dir}/jaxbbindings.xsd -Xannotate</arguments>
<outputDirectory>${basedir}/src/main/java</outputDirectory>
<schemaFiles>1.0.xsd</schemaFiles>
<clearOutputDir>true</clearOutputDir>
</configuration>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.4</version>
</dependency>
<dependency>
<groupId>com.sun.codemodel</groupId>
<artifactId>codemodel</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
</plugin>
xsd 1.0:
<xs:schema
targetNamespace="http://example.com/1.0"
xmlns:gs="http://example.com/1.0"
xmlns:cmn="http://example.com/another"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="another.xsd"
namespace="http://example.com/another" />
....
</xs:schema>
正如您在导入标记中看到的那样,我打算导入另一个模式。
another.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://example.com/another"
xmlns:vt="http://example.com/another">
...
</xs:schema>
因此,如果maven执行XJC以通过XSD生成java类,则还会生成package-info:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://example.com/another")
package de.fraunhofer.fokus.testing.fokusmbt.specexplorer.model;
如上所示,名称空间为http://example.com/another。但这是错误的。命名空间应为http://example.com/1.0。
另外一些工作正常(生成java类等)。
我错了什么?
答案 0 :(得分:1)
您生成2组课程 1# http://example.com/another 2# http://example.com/1.0。对于每组类,将生成package-info.java
,但您覆盖"${project.groupId}.model"
中的生成文件夹,因此您只有一个package-info.java
,只定义一个名称空间。
您应该删除<packageName>${project.groupId}.model</packageName>
,一切正常。