简体   繁体   中英

Packages are getting deleted while Generating Jaxb classes Using Maven and generated maven package name is incorrect

I tried to generate Jaxb Classes from XSD using jaxb2-maven-plugin.

I am able to get the jaxb classes in a package but my other packages are getting deleted. What is the reason for this? How to over come this? please can you give suggestions.

Below is what I tried

<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>

and xsd look like this :

<?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>

I have given targetNamespace="com.test.jaxb.model" but after generation I am only able to see jaxb classes under package name : model.jaxb.test.com..

Why so the package name is geting reversed and why is my other packages getting deleted ?

Your main problem is that you are using the src/main/java as <outputDirectory> . There are two major problems with that.

  1. The generated sources will be in a directory structure that under normal circumstances is under version control. What will you do with the generated sources? Should they be checked in ? Your VCS will be signalling that new files have been found that are still not added.
  2. The generated sources will not be deleted when you call mvn clean .

You should remove the <outputDirectory>src/main/java</outputDirectory> completely and let maven and the plugin to their job.

If you remove those lines you will have the sources generated into target/generated-sources and they will be compiled during the compile phase which I assume is what you want.


Regarding the reversed package name I believe you should change targetNamespace to this:

<xsd:schema targetNamespace="http://www.test.com/jaxb/model"
    ...

problem solved :

<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>

i removed targetNameSpace from xsd

mvn jaxb2:xjc worked !!

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

<clearOutputDir>false</clearOutputDir>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM