Maven插件执行顺序和类捆绑

时间:2017-09-11 10:28:42

标签: jaxb maven-3 xjc maven-jaxb2-plugin exec-maven-plugin

我一直在使用maven插件执行顺序和生成的类的打包来打击我的脑袋。

我需要从带有注释的XSD生成pojos,因为我使用的是 maven-jaxb2-plugin ,它使用了binding.xjb(xml文件包含完全分类的字段名称,是要注释的文件,并为生成的pojos添加注释。除此之外,我还有一种从映射文件动态生成 binding.xjb 文件的机制,目的是提供yaml文件格式的映射,而不是一个大的 binding.xjb < / strong>因为它很容易维护一个yml文件,为此我有一个独立的spring启动应用程序,它读取yaml文件并生成binding.xjb文件,我正在使用 exec-maven-plugin 来在 maven-jaxb2-plugin 之前调用我的应用程序,以便之前生成binding.xjb,并且 maven-jaxb2-plugin 可以使用它来注释pojos。

我知道要维护插件执行顺序,必须在同一阶段声明它们,以避免麻烦我正在使用 process-classes 阶段,并借助于此帮助生成pojos带注释。

但问题是生成的类没有打包到jar中,我想从生成的jar文件中排除我的binding.xjb生成逻辑。

我的构建配置如下所示: -

<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 个答案:

答案 0 :(得分:0)

代码生成通常在generate-sources阶段完成。不确定为什么你喜欢process-classes

同一阶段的插件顺序实际上应该是它们在pom.xml中列出的顺序。因此exec-maven-plugin应在maven-jaxb2-plugin之前执行。我在Maven 3的早期版本中有这个问题,应该已经修复了3.0.3 +。

如果没有任何帮助,请将exec-maven-plugin移至早期阶段,例如generate-sourcesmaven-jaxb2-pluginprocess-sources