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" を指定しましたが、生成後、パッケージ名: model.jaxb.test.com. の下にある jaxb クラスしか表示できません。

パッケージ名が逆になり、他のパッケージが削除されるのはなぜですか?

4

3 に答える 3

10

あなたの主な問題は、src/main/javaasを使用していることです<outputDirectory>。それには2つの大きな問題があります。

  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 に答える