maven-jaxb2-plugin forceRegenerate=false не работает?
Я пытаюсь настроить плагин maven-jaxb2-для генерации Java только в случае изменения XSD. Это не похоже на работу, потому что классы Java всегда обновляются. Это конфигурация плагина:
<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>
При сборке (maven clean install или maven install) я могу наблюдать такой вывод:
[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.
Но я ничего не менял в этих файлах с момента последней сборки!
Что я делаю неправильно?
заранее спасибо
Клеман
3 ответа
Нет никакого способа остановить регенерацию из-за следующего: у меня та же проблема, и я копался в коде плагина, чтобы выяснить причину:
Актуальная регистрация org.jvnet.jaxb2.maven2.RawXJC2Mojo.isUpToDate
использования if (getBuildContext().hasDelta(dependsFile))
который делегирует org.sonatype.plexus.build.incremental.DefaultBuildContext.hasDelta
который трудно закодировать, чтобы вернуть истину. Это связано с тем, что концепция инкрементальной сборки в Maven cf Incremental Build нарушена
Эту логику можно изменить, чтобы проверить, существует ли выходной каталог и, если да, изменился ли XSD. Я могу сообщить об ошибке, если найду время.
В качестве частичного обходного пути вы можете добавить <noFileHeader>true</noFileHeader>
к вашей конфигурации, чтобы сгенерированные источники были одинаковыми для неизмененного XSD. Решает мои проблемы с репозиторием, если это также важно для вас...
Не может остановить XJC от повторной генерации, он проверяет только временные метки, как кажется.
Файлы действительно регенерированы? У меня есть следующее:
[INFO] File [C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\src\main\resources\purchaseorder.xsd] was changed since the last build.
[INFO] File [C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\pom.xml] was changed since the last build.
[INFO] Checking up-to-date depends [[C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\src\main\resources\purchaseorder.xsd, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\pom.xml]].
[INFO] Checking up-to-date produces [[C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\generated\Items.java, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\generated\ObjectFactory.java, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\generated\PurchaseOrderType.java, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\generated\USAddress.java, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\META-INF\sun-jaxb.episode]].
[INFO] Depends timestamp [1.395.259.386.093], produces timestamp [1.395.259.394.765].
[INFO] Skipped XJC execution. Generated sources were up-to-date.
Похоже, что при условии org.sonatype.plexus.build.incremental.BuildContext
говорит, что файл изменился. Но когда плагин проверяет временные метки специально, он видит, что файлы обновлены. Я думаю, что проблема просто в сообщении журнала, он должен прочитать may have been changed
,
Пожалуйста, отправьте вопрос здесь.