Порядок выполнения плагинов Maven и связывание классов

Я бился головой с порядком выполнения плагинов maven и упаковкой сгенерированных классов.

У меня есть требование генерировать pojos из XSD с аннотацией, и для этого я использую maven-jaxb2-plugin, который использует файл binding.xjb (xml-файл, содержащий полностью классифицированные имена полей, который нужно аннотировать) и добавляю аннотации к сгенерированные pojos. Наряду с этим у меня есть механизм для динамического создания файла binding.xjb из файла сопоставления, цель которого состоит в том, чтобы просто обеспечить сопоставление в формате файла yaml, вместо того, чтобы иметь большой связывание. Xjb, потому что для этого легко поддерживать файл yml, для этого У меня есть отдельное весеннее загрузочное приложение, которое читает файл yaml и генерирует файл binding.xjb, и я использую exec-maven-plugin для вызова моего приложения перед maven-jaxb2-plugin, так что binding.xjb генерируется заранее и может быть используется maven-jaxb2-plugin для комментирования pojos.

И я знаю, что для поддержания порядка выполнения плагинов они должны быть объявлены на одной и той же фазе, чтобы избежать хлопот, я использую фазу классов процессов, и с помощью этого pojos генерируются с аннотацией.

Но проблема в том, что сгенерированные классы не упакованы в jar, и я хотел бы исключить мою логику генерации binding.xjb из сгенерированного файла jar.

Моя конфигурация сборки выглядит следующим образом:

<build>
   <defaultGoal>install</defaultGoal>
   <plugins>
       <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>exec-maven-plugin</artifactId>
           <version>1.6.0</version>
           <executions>
               <execution>
                   <phase>process-classes</phase>
                   <goals>
                       <goal>java</goal>
                   </goals>
               </execution>
           </executions>
           <configuration>
               <mainClass>com.abc.GeneratorApp</mainClass>
           </configuration>
       </plugin>
       <plugin>
           <groupId>org.jvnet.jaxb2.maven2</groupId>
           <artifactId>maven-jaxb2-plugin</artifactId>
           <version>${maven-jaxb2-plugin.version}</version>
           <executions>
               <execution>
                   <phase>process-classes</phase>
                   <goals>
                       <goal>generate</goal>
                   </goals>
               </execution>
           </executions>

           <configuration>
               <extension>true</extension>
               <args>
                   <arg>-XautoNameResolution</arg>
                   <arg>-Xannotate</arg>
               </args>
               <schemas>
                   <schema>
                       <fileset>
                           <directory>src/main/xsd</directory>
                           <includes>
                               <include>PATH-TO-XSD/my.xsd</include>
                           </includes>
                       </fileset>
                   </schema>
               </schemas>
               <bindings>
                   <binding>
                       <fileset>
                           <directory>src/main/xsd</directory>
                           <includes>
                               <include>*.xjb</include>
                           </includes>
                       </fileset>
                   </binding>
               </bindings>
               <plugins>
                   <plugin>
                       <groupId>org.jvnet.jaxb2_commons</groupId>
                       <artifactId>jaxb2-basics-annotate</artifactId>
                       <version>0.6.4</version>
                   </plugin>
                   <plugin>
                       <groupId>com.abc.xyz</groupId>
                       <artifactId>my-api</artifactId>
                       <version>1.2.3</version>
                   </plugin>
               </plugins>
           </configuration>
       </plugin>
   </plugins>

Может кто-то, пожалуйста, укажет мне на ошибку, которую я делаю, или предоставит предложение для решения этой проблемы, спасибо заранее.

1 ответ

Генерация кода обычно выполняется в generate-sources фаза. Не уверен, почему ты предпочитаешь process-classes,

Порядок плагинов в той же фазе должен фактически быть порядком, в котором они перечислены в pom.xml, Так exec-maven-plugin должно быть выполнено до maven-jaxb2-plugin, В ранних версиях Maven 3 с этим была ошибка, которая должна была быть исправлена ​​в 3.0.3+.

Если ничего не помогает, двигайтесь exec-maven-plugin на более раннем этапе, как generate-sources а также maven-jaxb2-plugin в process-sources,

Другие вопросы по тегам