【问题标题】:How can I run the maven compile twice with the exec plugin in between?如何使用 exec 插件运行 maven compile 两次?
【发布时间】:2012-09-15 21:07:00
【问题描述】:

我有一个简单的代码生成器 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 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


【解决方案1】:

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

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2018-04-12
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2020-05-17
  • 2013-03-25
相关资源
最近更新 更多