4

我尝试使用 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..

为什么包名被颠倒了,为什么我的其他包被删除了?

4

3 回答 3

10

您的主要问题是您使用的是src/main/javaas <outputDirectory>。这样做有两个主要问题。

  1. 生成的源将位于在正常情况下受版本控制的目录结构中。您将如何处理生成的源?他们应该被检查吗?您的 VCS 将发出信号,表明已找到尚未添加的新文件。
  2. 调用时生成的源不会被删除mvn clean

您应该完全删除<outputDirectory>src/main/java</outputDirectory>并让 maven 和插件完成他们的工作。

如果您删除这些行,您将生成源代码target/generated-sources,并且它们compile在我认为是您想要的阶段编译。


关于颠倒的包名,我相信你应该改成targetNamespace这样:

<xsd:schema targetNamespace="http://www.test.com/jaxb/model"
    ...
于 2012-11-15T06:39:11.657 回答
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 中删除了 targetNameSpace

mvn jaxb2:xjc 工作!

于 2012-11-15T07:35:42.993 回答
2

在配置标签下添加以下属性。

<clearOutputDir>false</clearOutputDir>
于 2017-05-29T16:07:39.517 回答