【问题标题】:Maven plugin execution order and classes bundlingMaven 插件执行顺序和类捆绑
【发布时间】:2017-09-11 10:28:42
【问题描述】:

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

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

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

但问题是生成的类没有打包到 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>

谁能指出我正在犯的错误或提供解决此问题的建议,在此先感谢。

【问题讨论】:

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


    【解决方案1】:

    代码生成通常在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

    【讨论】:

    • 感谢您提供视图,但在 generate-sources 阶段,这些类无法使用,但是我选择了一个不同的解决方案,即创建一个单独的 maven 插件并在 maven-jaxb2-plugin 之前调用它它的作用就像魅力一样。
    • @Apollo 在单独的模块中编译模式是一个好习惯。
    • 非常感谢这么棒的 maven-jaxb2-plugin
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2012-01-04
    • 2018-12-10
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多