Может ли плагин JAXB maven генерировать источники, только если что-то изменилось?

1

Что происходит для меня, так это то, что каждый раз, когда есть сборка maven, все мои файлы восстанавливаются. Я не хочу этого, так как я не внес никаких изменений в мой.xsd файл, и что происходит, потому что они были регенерированы, git обрабатывает их, поскольку были внесены изменения в эти файлы.

Здесь моя конфигурация:

<execution>
  <id>myExecution</id>
  <goals>
<goal>generate</goal>
  </goals>
   <configuration>
     <schemaDirectory>src/main/resources/MySchema.xsd</schemaDirectory>
     <generatePackage>com.mypackage</generatePackage>
     <generateDirectory>src/main/java</generateDirectory>
     <episode>false</episode>
   </configuration>
</execution>

есть ли способ сделать это?

Теги:
maven
jaxb
maven-jaxb2-plugin

2 ответа

3
Лучший ответ

Никогда не пишите сгенерированный источник в каталог src/main/java. Просто используйте значение generateDirectory по умолчанию ($ {project.build.directory}/generated-sources/xjc) - он автоматически добавляется в источники компиляции.

Лучше всего разместить все артефакты, сгенерированные процессом сборки, в каталог назначения maven (aka $ {project.build.directory}).

Кроме того, я рекомендую вам использовать плагин Codehaus JAXB-2 Maven, поскольку он, по-видимому, намного лучше поддерживается.

  • 0
    спасибо за лучшие практики, все комментарии приветствуются, но это только то, что это - комментарий. Это на самом деле не отвечает на мой вопрос.
  • 2
    Это решает проблему git, потому что ваше исходное дерево больше не обновляет свои файлы. Вы gitignore Maven целевых каталогов, верно?
Показать ещё 3 комментария
0

Я также ищу то же решение, которое вам нужно.

Чтобы не тратить время на перекомпиляцию кода каждый раз, в Maven я создал два профиля.

Первый профиль используется только для повторного создания классов из XSD: плагин находится внутри профиля

<profile>
  <id>create-from-xsd</id>
  <plugins>
     <plugin>
       ... maven jax plugin ...
     </plugin>
  <plugins>
<profile>

а потом другой профиль без плагина.

Когда мне нужен jax-b, я выбираю профиль 1 и классы генерируются; В остальных случаях я использую профиль 2.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню