I'm trying to configure maven-jaxb2-plugin to only generate java if XSD changes. That doesn't seem to work because java classes are always regenerated. This is the plugin configuration :
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.3</version>
<configuration>
<generateDirectory>${basedir}/src/main/java/</generateDirectory>
<strict>true</strict>
<verbose>true</verbose>
<readOnly>true</readOnly>
<episode>true</episode>
<forceRegenerate>false</forceRegenerate>
<removeOldOutput>false</removeOldOutput>
</configuration>
<executions>
<execution>
<id>commun-generate</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<generatePackage>my.package.dest</generatePackage>
<schemaDirectory>${basedir}/src/main/resources/schemas/wsrest</schemaDirectory>
<bindingDirectory>${basedir}/src/main/resources/schemas/wsrest</bindingDirectory>
<bindingIncludes>
<include>bindings.xml</include>
</bindingIncludes>
<episodeFile>${basedir}/src/main/java/META-INF/sun-jaxb_commun.episode</episodeFile>
</configuration>
</execution>
When building (maven clean install or maven install) i can observe this output :
[INFO] File [D:\IDE\Data\Eclipse\workspace\MyProject\src\main\resources\schemas\wsrest\myXSD.xsd] was changed since the last build.
[INFO] File [D:\IDE\Data\Eclipse\workspace\MyProject\src\main\resources\schemas\wsrest\bindings.xml] was changed since the last build.
[INFO] File [D:\IDE\Data\Eclipse\workspace\MyProject\pom.xml] was changed since the last build.
But i didn't change anything in theses files since the last build!
What am i doing wrong?
Thanks in advance
Clément
As a partial workaround you can add <noFileHeader>true</noFileHeader>
to your configuration so that generated sources are the same for unchanged XSD. Solves my problems with repository commits, if that matters to you as well...
Can't stop XJC from re-generation it checks just timestamps it seems.
There's no way to stop regenerate because of the following: I'd the same issue and I dug through the plugin code to find out the root cause:
The up-to-date check in org.jvnet.jaxb2.maven2.RawXJC2Mojo.isUpToDate
uses if (getBuildContext().hasDelta(dependsFile))
which delegates to org.sonatype.plexus.build.incremental.DefaultBuildContext.hasDelta
which is hard-coded to return true. This is because the concept of incremental build is broken in Maven c.f. Incremental Build
That logic can be changed to check if the output directory exists and if yes, if the XSD have changed. I may file a bug if I find time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With