You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven Flyway项目配置:调用flyway:migrate时执行Groovy脚本

在调用Flyway Migrate时自动执行Groovy脚本的Maven配置方案

我来帮你搞定这个需求——不管是直接运行mvn flyway:migrate,还是通过Maven生命周期阶段触发Flyway迁移,都要自动执行指定的Groovy脚本,关键是通过Maven插件的执行绑定和前置目标配置来实现。下面是具体的完整配置:

1. 配置Groovy Maven插件

首先,我们需要配置Groovy插件,定义要执行的脚本路径和相关依赖:

<build>
    <plugins>
        <!-- Groovy插件配置:执行指定的Groovy脚本 -->
        <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <version>1.5</version> <!-- 可根据需要调整版本 -->
            <executions>
                <execution>
                    <id>run-pre-migrate-groovy-scripts</id>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <!-- 这里填写你要执行的Groovy脚本路径,支持多个脚本 -->
                        <scripts>
                            <script>src/main/groovy/PreMigrateScript1.groovy</script>
                            <script>src/main/groovy/PreMigrateScript2.groovy</script>
                        </scripts>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>groovy-all</artifactId>
                    <version>3.0.17</version> <!-- 和你项目中的Groovy版本保持一致 -->
                </dependency>
            </dependencies>
        </plugin>

2. 配置Flyway插件,绑定Groovy脚本执行

接下来,我们要让Flyway的migrate目标在执行前自动触发Groovy脚本的运行。这里分两种场景兼顾:

  • 直接运行mvn flyway:migrate时自动执行Groovy脚本
  • 通过生命周期阶段(比如integration-test)触发迁移时也自动执行
<!-- Flyway插件配置:迁移前自动执行Groovy脚本 -->
        <plugin>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>9.22.3</version> <!-- 使用合适的Flyway版本 -->
            <executions>
                <!-- 场景1:直接运行mvn flyway:migrate时触发 -->
                <execution>
                    <id>default-migrate</id>
                    <goals>
                        <goal>migrate</goal>
                    </goals>
                    <preGoals>
                        <!-- 指定在migrate前先执行Groovy插件的execute目标 -->
                        <preGoal>groovy:execute</preGoal>
                    </preGoals>
                    <configuration>
                        <!-- 你的Flyway核心配置 -->
                        <url>jdbc:mysql://localhost:3306/your_database</url>
                        <user>db_username</user>
                        <password>db_password</password>
                        <locations>
                            <location>filesystem:src/main/resources/db/migration</location>
                        </locations>
                    </configuration>
                </execution>
                <!-- 场景2:通过生命周期阶段(比如integration-test)触发迁移 -->
                <execution>
                    <id>lifecycle-migrate</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>migrate</goal>
                    </goals>
                    <preGoals>
                        <preGoal>groovy:execute</preGoal>
                    </preGoals>
                    <!-- 可以复用上面的configuration,或者单独配置 -->
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

关键说明

  • preGoals的作用:这个配置会让Maven在执行当前插件的目标前,先运行指定的其他插件目标,完美实现了“迁移前必跑Groovy脚本”的需求。
  • 版本一致性:确保Groovy插件依赖的groovy-all版本和你项目中的Groovy依赖版本一致,避免兼容性问题。
  • 脚本路径:如果你的Groovy脚本放在其他目录,调整<script>标签中的路径即可,支持绝对路径和相对路径。

这样配置后,不管你是直接执行mvn flyway:migrate,还是运行mvn integration-test触发迁移,Groovy脚本都会自动在Flyway迁移之前执行。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:05:56