我有一个简单的代码生成器G,它从我的项目中读取接口A,并从中生成一个新的接口B。因此,我需要实现以下目标:
编译A
执行G
编译B
步骤1和3由maven-compiler-plugin处理,而对于步骤2,我使用maven-exec-plugin。当前第1步和第2步运行良好,但是我无法弄清楚如何再次运行编译器插件来编译新生成的B版本。
使用maven是否可能,或者还有其他方法可以解决我的问题?
解:
基于khmarbaise的答案,我将此添加到pom.xml中,以使第一个编译在generate-sources阶段运行,而process-sources阶段的代码生成使生成的类在compile阶段可用:
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<executions>
<execution>
<id>pre-compile</id>
<phase>generate-sources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.example.MyCodeGenerator</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
最佳答案
让我们在generate-sources中进行编译。只需将maven-compiler-plugin配置为在该特定生命周期阶段运行,然后将生成的代码(编译后的代码)放在默认位置以外的其他位置即可。其次,让您的执行随后在一个阶段中运行(流程源),最后让其余部分照常执行。
结果是您必须将maven-compiler-plugin绑定到generate-sources阶段,将exec-plugin绑定到process-sources生命周期阶段。