我尝试使用jaxb2-maven-plugin从XSD生成Jaxb类。
我能够在一个包中获取jaxb类,但我的其他包被删除了。这是什么原因?怎么过来这个?请你给个建议。
以下是我尝试的内容
<bulid>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>src/main/xsd</schemaDirectory>
<outputDirectory>src/main/java</outputDirectory>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</bulid>
和xsd看起来像这样:
<?xml version="1.0" encoding="UTF-8"?><xsd:schema targetNamespace="com.test.jaxb.model"
xmlns:ns="com.test.jaxb.model" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="TestResults">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="testSuites" type="Q1:TestSuiteRun"/>
</xsd:sequence>
<xsd:attribute name="testProject" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="TestCaseRun">
<xsd:complexContent>
<xsd:extension base="Q1:TestRun">
<xsd:sequence>
<xsd:element name="result" type="Q1:Severity"/>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="variations" type="Q1:VariationRun">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="variationCount" type="xsd:int"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
我已经给了targetNamespace =“com.test.jaxb.model”但是在生成之后我只能看到包名下的jaxb类:model.jaxb.test.com ..
为什么包名称反转,为什么我的其他包被删除?
答案 0 :(得分:10)
您的主要问题是您使用src/main/java
作为<outputDirectory>
。这有两个主要问题。
mvn clean
时,生成的来源 将被删除。您应该完全删除<outputDirectory>src/main/java</outputDirectory>
并让maven和插件完成工作。
如果删除这些行,您将生成源target/generated-sources
,并且 将在compile
阶段编译,我认为这是你想要的。
关于反向包名称,我认为您应该将targetNamespace
更改为:
<xsd:schema targetNamespace="http://www.test.com/jaxb/model"
...
答案 1 :(得分:7)
问题解决了:
<bulid>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>src/main/xsd</schemaDirectory>
<outputDirectory>src/main/java</outputDirectory>
<packageName>com.test.jaxb.model</packageName>
<clearOutputDir>false</clearOutputDir>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</bulid>
我从xsd
中删除了targetNameSpacemvn jaxb2:xjc工作!!
答案 2 :(得分:2)
在配置标记下添加以下属性。
<clearOutputDir>false</clearOutputDir>