JAXB – Code Erzeugung – Maven


Es gibt verschiedene Plugins, um mit Maven Code aus XML-Schemata zu erzeugen. Im Allgemeinen findet man als Erstes das jaxb2-maven-plugin Plugin.

  <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>xjc</id>
                        <phase>generate-sources</phase>                        
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <xjbSources>
                        <xjbSource>src/main/resources/global.xjb</xjbSource>
                    </xjbSources>
                    <sources>
                        <source>${basedir}/src/main/resources/xsd/Dieter.xsd</source>
                    </sources>
                    <outputDirectory>${basedir}/target/generated-sources</outputDirectory> 
                    <clearOutputDir>true</clearOutputDir>
                    <packageName>com.example.jaxb</packageName>
                </configuration>
            </plugin>

Bei meinen aktuellen Jakarta Projekten erzeugt dieses Plugin allerdings Fehlermeldungen:

[ERROR] Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:3.2.0:xjc (xjc) on project backOfficeBillingEjb: Execution xjc of goal org.codehaus.mojo:jaxb2-maven-plugin:3.2.0:xjc failed: A required class was missing while executing org.codehaus.mojo:jaxb2-maven-plugin:3.2.0:xjc: org/eclipse/persistence/internal/jaxb/WrappedValue

Da ich keine Zeit hatte den Fehler nachzugehen, habe ich nach kurzer Suche folgende Seite gefunden

https://github.com/highsource/jaxb-tools?tab=readme-ov-file#jaxb-maven-plugin

Dort wird ein aktuell gepflegtes Plugin bereitgestellt. Leider gibt es annähernd keine Dokumentation im Web. Wenn man das Plugin jedoch einbindet, ist die Dokumentation im Eclipse POM Editor online gut nachvollziehbar. Eine erste einfache Konfiguration sieht wie folgt aus

            <plugin>
                <groupId>org.jvnet.jaxb</groupId>
                <artifactId>jaxb-maven-plugin</artifactId>
                <version>4.0.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaDirectory>${basedir}/src/main/resources/xsd</schemaDirectory>
                    <schemaIncludes>**/*.xsd</schemaIncludes>
                    <generateDirectory>${basedir}/target/generated-sources</generateDirectory>
                    <bindingDirectory>${basedir}/src/main/resources/</bindingDirectory>
                </configuration>                            
            </plugin>

Wichtig ist, dass das rekursive Durchlaufen mit schemaIncludes explizit konfiguriert werden muss. Außerdem werden die Bindings im Verzeichnis der XSDs erwartet, können aber mit bindingDirectory auch in anderen Verzeichnissen gesucht werden.

Das Plugin ist einfach zu konfigurieren und damit schnell am Start …. Empfehlung!!

Du hast Fragen oder Anmerkungen? Kontakt: arndt@schoenb.de