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

StackOverflow https://stackoverflow.com/questions/13392057

Question

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 ?

Was it helpful?

Solution

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

OTHER TIPS

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

Under configuration tag add below property.

<clearOutputDir>false</clearOutputDir>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top