2016-04-26 1 views
1

Моего П выглядитJaxb2 регенерировать классы с каждой МВН чистой упаковкой

<plugins> 
     <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <version>0.12.3</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <schemaLanguage>WSDL</schemaLanguage> 
       <generateDirectory>src/main/java</generateDirectory> 
       <schemaDirectory>src/main/resources/wsdl/</schemaDirectory> 
       <schemaIncludes> 
        <include>*.xsd</include> 
        <include>draw/*.xsd</include> 
       </schemaIncludes> 
      </configuration> 
     </plugin> 

    </plugins> 

Когда я делаю mvn clean package он построен в соответствии с конфигурацией. Однако после того, как я его построил, я не хочу его строить каждый раз, когда я делаю mvn clean package, если только XSD не был изменен.

Как это достичь?

+0

Создание в 'src/main/java' вообще плохой идеи ... – khmarbaise

+0

Вы правы ... Я исправил это спасибо – idipous

ответ

1

Стадия по умолчанию, заявленная в этом плагине для цели <goal>generate</goal>, равна generate-resources. ссылаясь на Maven Default Lifecycle, вы не можете пропустить фазы. Команда mvn phase-x всегда означает «запустить все фазы до фазы-x включительно».

Вы можете использовать profile. так что вы можете профилировать свой проект для создания с или без генерации ресурсов.

Пример:

<profiles> 
    <profile> 
     <id>GEN-RESOURCES</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.jvnet.jaxb2.maven2</groupId> 
        <artifactId>maven-jaxb2-plugin</artifactId> 
        <version>0.12.3</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>generate</goal> 
          </goals> 
         </execution> 
        </executions> 
        <configuration> 
         <schemaLanguage>WSDL</schemaLanguage> 
         <generateDirectory>src/main/java</generateDirectory> 
         <schemaDirectory>src/main/resources/wsdl/</schemaDirectory> 
         <schemaIncludes> 
          <include>*.xsd</include> 
          <include>draw/*.xsd</include> 
         </schemaIncludes> 
        </configuration> 
       </plugin> 

      </plugins> 
     </build> 
    </profile> 
</profiles> 

для активации использования профиля -p

mvn clean package -PGEN-RESOURCES 

иначе никакая вещь не будет генерироваться Maven профиль объяснил here

Я надеюсь, что это помогает.

+0

Пока это будет работать, это не правильное направление. Во-первых, «maven-jaxb2-plugin» имеет встроенную функцию для регенерации только в случае изменения схем. Далее, использование профилей для включения и выключения шагов сборки приведет к ужасным файлам сборки. Поэтому вниз, извините. – lexicore

2

Отказ от ответственности: Я являюсь автором maven-jaxb2-plugin.

Во-первых, не генерируйте в src/main/java.

Далее, если настроена правильно, плагин не регенерировать , если только что-то изменения. Плагин собирает «исходный» и «целевой» файлы и генерирует тогда и только тогда, когда временная метка «исходного» файла более новая, чем у «целевых» файлов.

См. Up-to-Date Checks в документации, чтобы узнать больше.

Это, однако, предполагает, что плагин может четко определять временные метки как «исходных», так и «целевых» файлов. Это одна из причин, почему вы должны генерировать код в target/generated-source/<dir>, а не в src/main/java.

Далее, это определенно не работает с mvn *clean* package, так как *clean* удаляет target и поэтому target/generated-source/<dir>. Так что просто запустите mvn package вместо mvn clean package.

+0

Спасибо, я изменился с src/main/java и действительно работает, как вы описали. Когда я не использую чистый, он не строится. – idipous

Смежные вопросы