Nikhil Ambekar
Nikhil Ambekar

Reputation: 110

How to ignore classes from imported schemas in the generated jar for a particular schema

I have a xsd file a.xsd which imports another xsd b.xsd. I want to create a jar of all the classes from the a.xsd but ignore classes generated from b.xsd. My pom file is as follows.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.personal.proj</groupId>
    <artifactId>schema-model</artifactId>
    <version>1.0.0</version>
    <name>SchemaModel</name>
    <build>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.12.3</version>
                <executions>
                    <execution>
                        <id>id</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <schemaDirectory>src/main/xsd</schemaDirectory>
                            <schemaIncludes>
                                <include>a.xsd</include>
                            </schemaIncludes>
                            <schemaExcludes>
                                <exclude>b.xsd</exclude>
                            </schemaExcludes>
                            <forceRegenerate>true</forceRegenerate>
                            <removeOldOutput>true</removeOldOutput>
                            <bindingDirectory>src/main/xsd</bindingDirectory>
                            <bindingIncludes>
                                <include>schema.xjb</include>
                            </bindingIncludes>
                            <generateDirectory>${project.build.directory}/generated-sources</generateDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

My schema.xjb file is

<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
jxb:version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="a.xsd" node="/xs:schema">
    <jxb:schemaBindings>
        <jxb:package name="com.a.model" />
    </jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="b.xsd" node="/xs:schema">
    <jxb:schemaBindings>
        <jxb:package name="com.b.model" />
    </jxb:schemaBindings>
</jxb:bindings>

This link shows how this can be done, but i am unable to configure it.If i need to add episodes, i need to generate it(b.episode) in the same build and use it for generation of a.jar

Upvotes: 1

Views: 4773

Answers (1)

lexicore
lexicore

Reputation: 43689

Use map="false" on b.xsd bindings:

<jxb:bindings schemaLocation="b.xsd" node="/xs:schema">
    <jxb:schemaBindings map="false">
        <jxb:package name="com.b.model" />
    </jxb:schemaBindings>
</jxb:bindings>

Still some of the classes may be generated (XJC has some problems with that). I often delete them in a post-processing step in the build.

I generally recommend using episodes for such things. Here's a test project for episodes.

Disclaimer: I'm the author of the .

Upvotes: 3

Related Questions