【发布时间】:2012-09-15 21:07:00
【问题描述】:
我有一个简单的代码生成器 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 em> 阶段是什么使生成的类在 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>
【问题讨论】:
-
是否需要编译A才能生成?
-
是的,因为我的生成器 G 通过反射分析 A 来创建 B。
-
我假设你有三个不同的 maven 模块,它们被总结成一个多模块构建?
-
不,这只是一个模块。我知道代码生成是否会发生在另一个依赖于具有接口 A 的模块的模块中,这很容易,因为我可以在编译之前的一个阶段执行代码生成。但由于它实际上是关于生成一个单一的界面,我宁愿让这种情况发生在一个模块中。
标签: maven-3 maven-compiler-plugin