我有一个简单的代码生成器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生命周期阶段。

10-02 02:20
查看更多