当前位置: 首页 > 知识库问答 >
问题:

Maven插件执行顺序和类捆绑

劳彦
2023-03-14

我一直在绞尽脑汁研究maven插件的执行顺序和生成类的打包。

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

我知道为了维护插件执行顺序,它们必须在同一阶段声明,以避免麻烦,我正在使用进程类阶段,并在此帮助下生成带有注释的pojos。

但问题是生成的类没有打包到jar中,我也希望排除我的绑定。从生成的jar文件生成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个答案

姜经武
2023-03-14

代码生成通常在生成源阶段完成。不确定您为什么喜欢进程类。

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

如果没有任何帮助,请将exec-maven-plugin移动到更早的阶段,例如生成源maven-jaxb2-plugin进程源

 类似资料:
  • 我正在尝试使用hibernate3 maven插件和sql maven插件。我的目标是我可以运行“maven generate sources”,它应该做到: 1) hibernate3 maven插件生成初始化。sql 2) sql maven插件执行它(一个其他脚本) 我的配置的问题是:如果我运行生成源只有hibernate3-maven-plugin它的工作原理和生成thinit.sql但我

  • 我正在尝试使用shade插件创建一个可执行JAR的简单示例。我逐行浏览了这里的示例,在我的机器上似乎根本没有执行shade插件。 我的阴影POM代码是: 运行“mvn包”后,创建的JAR不包含任何项目依赖项。从调试跟踪来看,似乎从未调用过shade插件。要让shade发挥其魔力,是否还需要一些额外的步骤? 编辑:示例的完整代码位于https://github.com/hutch31/maven-s

  • 使用统一的控制脚本来初始化其他脚本 一般我都会有一个 Game.ts 的脚本作为总的控制脚本,假如我还有 Player.ts, Enemy.ts, Menu.ts 三个组件,那么他们的初始化过程是这样的: // Game.ts import { _decorator, Component, Node } from "cc"; const { ccclass, property } = _decor

  • 我是maven的新手,学习如何以及何时在插件中执行阶段/目标 假设我的pom中有以下代码片段 现在,如果我执行mvn安装,安装之前的modello的所有阶段(以及每个阶段对应的所有目标)都将执行。正当 但是,如果进行以下修改以引入特定目标,则只会执行一个目标,即java目标(因为它位于安装阶段之前的生成源代码阶段)。对吗?

  • 在我当前的项目设置中,maven shade插件的执行非常不稳定。这个插件看起来像是在我构建父模块之后执行的,但是在那个实例中执行之后,它在独立构建子模块时无法执行。 我的父母是 还有孩子pom 以及在具有上述pom的子模块上运行“安装”目标时的构建输出 如您所见,尽管在< code >中定义了执行,maven shade插件并没有执行

  • 问题内容: 我有一个抽象基类,用作我的单元测试(TestNG 5.10)的基础。在该类中,我将初始化测试的整个环境,设置数据库映射等。此抽象类具有一个带有注释的方法,该方法可以进行初始化。 接下来,我用具有方法和方法的特定类扩展该类。这些方法对环境进行类特定的初始化(例如,将一些记录放入数据库中)。 如何执行带注释的方法的特定顺序?我需要先执行抽象基类中的那些,然后再执行扩展类中的那些。 例: 预