如何编辑Maven编译后target目录中自动生成的Liquibase脚本文件
可行解决方案
以下是两种经过验证的落地路径,优先推荐无侵入的适配方案:
方案1:使用Liquibase原生多changelog组合机制(优先推荐)
该方案完全不需要修改自动生成的文件,从根源避免编译覆盖问题:
- 在项目
src/main/resources下新建自定义Liquibase根changelog文件,可命名为master-changelog.xml - 根changelog中先引入target目录下自动生成的schema变更文件,再引入你自行编写的初始化数据变更集:
<!-- 示例master-changelog.xml内容 --> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd"> <!-- 引入内部插件生成的schema变更文件 --> <include file="target/generated-sources/liquibase/generated-schema-changelog.xml" relativeToChangelogFile="false"/> <!-- 引入自定义的初始化数据变更集文件,存放在src目录下不会被编译覆盖 --> <include file="classpath:custom-init-data-changelog.xml"/> </databaseChangeLog>
- 后续执行Liquibase命令时直接指定该根changelog作为入口即可,不需要改动原有内部插件的生成逻辑。
方案2:通过Maven插件在构建生命周期中自动修改生成的changelog
如果业务要求必须把自定义变更集合并到自动生成的单个changelog文件中,可以使用以下插件在process-resources阶段(内部插件生成changelog之后、Liquibase执行之前)自动修改target下的文件:
可选插件列表
org.codehaus.mojo:xml-maven-plugin:专门用于XML文件的修改操作,可以精准在指定XML节点后插入自定义changeset内容,适合结构规范的changelog修改org.codehaus.gmaven:groovy-maven-plugin:可以嵌入Groovy脚本灵活解析、修改XML内容,适合复杂的自定义修改逻辑com.google.code.maven-replacer-plugin:replacer:基于字符串替换的轻量修改方案,适合简单的内容插入场景
配置示例(xml-maven-plugin)
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>xml-maven-plugin</artifactId> <version>1.0.2</version> <executions> <execution> <phase>process-resources</phase> <goals> <goal>transform</goal> </goals> <configuration> <transformationSet> <dir>${project.build.directory}/generated-sources/liquibase</dir> <includes> <include>generated-schema-changelog.xml</include> </includes> <stylesheet>src/main/resources/insert-init-changeset.xslt</stylesheet> </transformationSet> </configuration> </execution> </executions> </plugin>
注意需要提前编写XSLT转换文件,实现在生成的changelog末尾追加自定义changeset的逻辑。
注意事项
- 方案1的适配成本最低,且符合Liquibase的最佳实践,无构建依赖侵入,优先选择
- 若使用方案2,必须确保修改插件的执行顺序在内部库的changelog生成插件之后、Liquibase执行插件之前,避免修改逻辑失效
内容的提问来源于stack exchange,提问作者Dunham
相关产品推荐
相关产品推荐

