简体   繁体   中英

How to generate classes for XSD in Maven src/test, that reference XSD in src/main

The following maven setup:

src/main/resources/BaseTypes.xsd
src/test/resources/MyTypeUsingBaseTypes.xsd

Now I would like to have the BaseTypes generated into target/classes, while the MyTypeUsingBaseTypes into target/test-classes.

The problem is, that the BaseTypes are also generated (= duplicated) into target/test-classes.

I am using the org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.12.3, with two Executions:

<plugin>
  <groupId>org.jvnet.jaxb2.maven2</groupId>
     <artifactId>maven-jaxb2-plugin</artifactId>
     <version>0.12.3</version>
     <executions>
    <execution>
      <id>gen-schemas</id>
      <goals>
        <goal>generate</goal>
      </goals>
    </execution>

    <execution>
      <id>gen-test-schemas</id>
      <phase>generate-test-sources</phase>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <generateDirectory>target/generated-test-sources/xjc</generateDirectory>
        <addTestCompileSourceRoot>true</addTestCompileSourceRoot>
        <schemaDirectory>src/test/resources</schemaDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

Maybe something like this can do the job (check the paths) :

Try adding to your <configuration> the following options :

<schemaLanguage> : Which tells what is the type of the file (wsdl, wadl, ear etc.)

<schemaIncludes> : This gives you the opportunity to select specific files

<generatePackage> : Will put the generated *.java files into package in the selected generation directory

That way you can write down as many as you want executions for as many as you want different schemas.

<executions>
    <execution>
        <id>xjc-schema2</id>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <schemaLanguage>wsdl</schemaLanguage>
            <schemaDirectory>src/test/resources</schemaDirectory>
            <schemaIncludes>
                <include>MyTypeUsingBaseTypes.xsd</include>
            </schemaIncludes>
            <generatePackage>com.name.of.package.MyTypeUsingBaseTypes</generatePackage>

            <generateDirectory>target/generated-test-sources/xjc</generateDirectory>
            <clearOutputDir>false</clearOutputDir>
        </configuration>
    </execution>
    <execution>
        <id>xjc-schema2v2</id>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <schemaLanguage>wsdl</schemaLanguage>
            <schemaDirectory>src/main/resources</schemaDirectory>
            <schemaIncludes>
                <include>BaseTypes.xsd</include>
            </schemaIncludes>
            <generatePackage>com.name.of.package.BaseTypes</generatePackage>

            <generateDirectory>target/generated-sources/xjc</generateDirectory>
            <clearOutputDir>false</clearOutputDir>
        </configuration>
    </execution>
</executions>

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