4

我有一个简单的代码生成器 G,它从我的项目中读取一个接口 A 并从中生成一个新的接口 B。因此我需要实现这一点:

  1. 编译 A
  2. 执行 G
  3. 编译 B

第 1 步和第 3 步由 maven-compiler-plugin 处理,而第 2 步我使用 maven-exec-plugin。目前第 1 步和第 2 步运行良好,但我不知道如何再次运行编译器插件来编译新生成的 B 版本。

maven可以做到这一点,还是有另一种方法可以解决我的问题?

解决方案:

根据 khmarbaise 的回答,我将其添加到我的 pom.xml 中,以让第一次编译在generate-sources阶段运行,并在process-sources阶段生成代码,使生成的类在编译阶段可用:

<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>
4

1 回答 1

7

让我们在 generate-sources 中进行编译。只需将 maven-compiler-plugin 配置为在该特定生命周期阶段运行,并将生成的代码(编译代码)放在默认情况下的其他位置。其次,让您的执行在之后的一个阶段中运行(流程源),最后让其余的照常进行。结果是您必须将 maven-compiler-plugin 绑定到 generate-sources 阶段,将 exec-plugin 绑定到 process-sources 生命周期阶段。

于 2012-09-24T13:07:35.113 回答