Java 编译阶段后通过Maven插件生成新源代码
我有一个Maven项目,需要在其中执行两个代码生成步骤。一个生成一些Java类型,然后第二个依赖于这些Java类型生成更多的代码。有没有一种方法可以在构建过程中同时执行这两个步骤 目前我的步骤是:Java 编译阶段后通过Maven插件生成新源代码,java,maven,code-generation,pom.xml,Java,Maven,Code Generation,Pom.xml,我有一个Maven项目,需要在其中执行两个代码生成步骤。一个生成一些Java类型,然后第二个依赖于这些Java类型生成更多的代码。有没有一种方法可以在构建过程中同时执行这两个步骤 目前我的步骤是: 执行第一个代码生成插件(在生成源代码期间) 将生成类型的目录添加到生成路径 执行第二代代码插件(在编译期间) 然而,我的问题是,第二代代码生成插件生成的任何内容都不会被编译(因为编译阶段已经完成)。如果我将第二个代码生成插件附加到早期阶段,它将失败,因为它需要来自第一个代码生成插件的类出现在类路径上
生成源代码期间
)生成源
阶段生成一些内容
这种方法的最大优点是:您永远不会陷入某种循环(比如“A”需要生成代码,而“A”需要生成代码)。因此,您的构建将更加简单,并且您将花费更少的时间寻找奇怪的bug
[UPDATE]在我的项目中,我通过测试运行代码生成器。如果没有特殊选项,文件将生成到临时文件夹中,并与源进行比较。这使我能够看到在生成的代码()中何时发生意外更改
设置系统属性后,源文件将被覆盖,我可以将更改提交给我的VCS。您始终可以配置编译器插件的两次执行,都与编译阶段相关。在其中,您包括额外的内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<executions>
<execution>
<id>one</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration></configuration>
</execution>
<execution>
<id>two</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<compilerArgument>-verbose -bootclasspath ${java.home}\lib\rt.jar</compilerArgument>
</configuration>
</execution>
</executions>
<plugin>
org.apache.maven.plugins
:
当给定多个与特定阶段匹配的执行时,它们将按照POM中指定的顺序执行,首先运行继承的执行
但我并没有得到你想要的。
感谢Udo的回复-您提出了一个有趣的替代方案,我没有考虑过。我认为你的格式有点混乱,为了清楚起见,你能纠正一下吗?@ssedano:执行顺序有保证吗?@Aarondigula看到我的添加。那么我如何绑定到生成源阶段?我必须为此编写一个maven插件吗?@Wudong:一个简单的maven模块只需要几行代码,但为了可靠地工作,您需要将代码生成器移动到一个stand aline项目(maven可能不会加载运行时生成的JAR)。如果这太费劲了,试试看我刚刚试过使用maven exec插件从一个依赖模块运行Java主类,它工作得很好,所以根本不需要独立的项目。谢谢你的启发。