2015-12-04 4 views
0

У меня есть приложение JavaEE, maven. В этом приложении я использую классы, созданные из XSD, и mappers через Mapstruct.Maven жизненный цикл понимание

В моем EJB модуль, то Maven сборки необходимо выполнить следующие действия:

  1. генерировать классы Java из XSD по jaxb2-Maven-плагин
  2. добавить эти сгенерированные классы в папку источников по строить-хелпер-Maven-плагин, потому что:
  3. Maven-процессор плагин генерирует Mapstruct сопоставителя IM plementions по порождающих-mapstruct-картографов, которые используют эти XSD генерироваться классы
  4. , наконец, добавить эти реализации картографа на источники папки также

К сожалению, это не работает для меня. Это плагин часть pom.xml EJB-в:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxb2-maven-plugin</artifactId> 
    <version>${version.jaxb2-maven-plugin}</version> 
    <executions> 
     <execution> 
      <id>xjc</id> 
      <goals> 
       <goal>xjc</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <outputDirectory>${project.build.directory}/generated-sources</outputDirectory> 
     <packageName>com.my.project</packageName> 
     <catalog>src/main/resources/xsd/CustomCatalog.xml</catalog> 
     <xjbSources> 
      <xjbSource>${project.basedir}/src/main/resources/jaxb2/</xjbSource> 
     </xjbSources> 
     <sources> 
      <source>${project.basedir}/src/main/resources/xsd/applications/MyNewClass.xsd</source> 
     </sources> 
     <xsdPathWithinArtifact>my/source/xsds</xsdPathWithinArtifact> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.bsc.maven</groupId> 
    <artifactId>maven-processor-plugin</artifactId> 
    <configuration> 
     <defaultOutputDirectory> 
      ${project.build.directory}/generated-sources 
     </defaultOutputDirectory> 
    </configuration> 
    <executions> 
     <execution> 
      <id>generate-mapstruct-mappers</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>process</goal> 
      </goals> 
      <configuration> 
       <processors> 
        <processor>org.mapstruct.ap.MappingProcessor</processor> 
       </processors> 
      </configuration> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>org.mapstruct</groupId> 
      <artifactId>mapstruct-processor</artifactId> 
      <version>${version.mapstruct}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mapstruct</groupId> 
      <artifactId>mapstruct</artifactId> 
      <version>${version.mapstruct}</version> 
     </dependency> 
    </dependencies> 
</plugin> 
<!-- attach sources --> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>add-source</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>add-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>${project.build.directory}/generated-sources</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Это создает классы из JAXB, и поместить в источники в файл JAR. Но сгенерированные реализации Mapper не находятся в источниках.

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

Если я изменяю фазу плагинов, maven-процессор-плагин будет бросать не может найти simbol ERROR, а символ - сгенерированный класс из jaxb.

Спасибо, что помогли мне.

+0

Попробуйте добавить декларацию 'build-helper-maven-plugin' _before_' maven-processor-plugin'. – Tunaki

+0

То же самое: реализации картпера не будут в источниках – victorio

+0

Какую версию 'maven-processor-plugin' вы используете?? Можете ли вы также указать версии других плагинов, которые используются? Можете ли вы сделать пример такого рода на github? – khmarbaise

ответ

2

Согласно моему пониманию, желаемый поток будет выглядеть следующим образом:

  • Генерация классов из XSD
  • Добавьте их в качестве источников (через помощника Builder)
  • Генерация картографов из MapStruct (который требует классов из XSD)
  • Добавьте их в качестве источников (через Builder помощник)
  • собрать все

Таким образом, вы можете попробовать:

  • установить выполнение jaxb2-Maven-плагин к фазе генерировать-источники
  • установки первого выполнения сборки-хелперов-Maven-плагин к фазе генерировать-источники (который должен добавлять классы из XSD в качестве источников)
  • установить исполнение генерации mappers для фазовых источников процесса (которые должны найти классы XSD в качестве источников), но объявить их после записи build-helper-maven-plugin
  • установить второе выполнение build-helper-maven-plugin для фазовых процессов-источников, которые должны добавить mapp ers как источники

Чтобы лучше прояснить это: два исполнения модуля build-helper-maven-plugin в двух разных фазах для двух разных источников. Также лучше указывать на две разные папки для каждого сгенерированного источника (то есть generate-sources-xsd и generated-sources-mappers). В вашем pom следуйте за этим заявлением: jaxb2 plugin, mappers plugin, build helper plugin.

Ниже возможный пример:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxb2-maven-plugin</artifactId> 
    <version>2.1</version> 
    <executions> 
     <execution> 
      <id>xjc</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>xjc</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <outputDirectory>${project.build.directory}/generated-sources-xsd</outputDirectory> 
     <packageName>com.my.project</packageName> 
     <catalog>src/main/resources/xsd/CustomCatalog.xml</catalog> 
     <xjbSources> 
      <xjbSource>${project.basedir}/src/main/resources/jaxb2/</xjbSource> 
     </xjbSources> 
     <sources> 
      <source>${project.basedir}/src/main/resources/xsd/applications/MyNewClass.xsd</source> 
     </sources> 
     <xsdPathWithinArtifact>my/source/xsds</xsdPathWithinArtifact> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.bsc.maven</groupId> 
    <artifactId>maven-processor-plugin</artifactId> 
    <version>2.2.4</version> 
    <configuration> 
     <defaultOutputDirectory> 
      ${project.build.directory}/generated-sources-mappers 
     </defaultOutputDirectory> 
    </configuration> 
    <executions> 
     <execution> 
      <id>generate-mapstruct-mappers</id> 
      <phase>process-sources</phase> 
      <goals> 
       <goal>process</goal> 
      </goals> 
      <configuration> 
       <processors> 
        <processor>org.mapstruct.ap.MappingProcessor</processor> 
       </processors> 
      </configuration> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>org.mapstruct</groupId> 
      <artifactId>mapstruct-processor</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mapstruct</groupId> 
      <artifactId>mapstruct</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 
    </dependencies> 
</plugin> 
<!-- attach sources --> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.9</version> 
    <executions> 
     <execution> 
      <id>add-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>${project.build.directory}/generated-sources-xsd</source> 
       </sources> 
      </configuration> 
     </execution> 
     <execution> 
      <id>add-source2</id> 
      <phase>process-sources</phase> 
      <goals> 
       <goal>add-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>${project.build.directory}/generated-sources-mappers</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Примечание: в фрагменте выше, я должен был добавить несколько вариантов для того, чтобы заставить его работать.

Полный список фаз жизненного цикла Maven, here.

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