mybatis-generator如何生成properties、sql等非Java/XML格式文件?
MyBatis Generator 自定义生成非Java/XML资源文件方案
方案1:拆分Maven构建阶段(最稳定)
把自定义文件生成逻辑从MBG插件中剥离,利用Maven阶段的执行顺序解决路径和目录问题:
- 先正常配置
mybatis-generator-maven-plugin绑定到generate-sources阶段,执行完成后会自动创建target/generated-sources/mybatis-generator目录,所有默认Java、XML文件也已写入完成。 - 额外配置
gmavenplus-plugin(执行Groovy脚本)或exec-maven-plugin(执行自定义Java逻辑),同样绑定到generate-sources阶段,调整<execution>顺序放在MBG插件之后。该阶段可以直接读取Maven内置的${project.build.directory}、${project.basedir}等属性获取项目路径,不需要硬编码。 - 所有自定义生成的properties、sql、SPI文件直接写入
target/generated-sources/mybatis-generator对应路径即可,MBG后续流程不会覆盖该目录下的非自身生成的文件。 - 如果需要将自定义资源打入最终Jar包,补充如下Maven配置即可:
<build> <resources> <!-- 原有资源配置保留 --> <resource> <directory>${project.build.directory}/generated-sources/mybatis-generator</directory> <includes> <include>**/*.properties</include> <include>**/*.sql</include> <include>**/META-INF/services/*</include> </includes> </resource> </resources> </build>
方案2:基于MBG自定义插件实现
如果不想额外引入其他插件,调整自定义插件的逻辑即可实现:
- 在MBG的配置文件中通过属性注入项目路径,避免硬编码:
<context id="default" targetRuntime="MyBatis3"> <property name="projectBuildDir" value="${project.build.directory}"/> <!-- 原有其他配置保留 --> </context>
Maven执行时会自动替换${project.build.directory}为实际的target目录路径,自定义插件中可通过context.getProperties().get("projectBuildDir")直接读取。
- 自定义插件选择
contextGenerateEnd回调方法执行文件写入逻辑,该方法在MBG所有默认文件生成、目录创建完成后触发,此时target/generated-sources/mybatis-generator目录已存在,直接写入自定义文件不会被后续流程覆盖。
Git识别问题解决
两种方案的生成文件都保存在target目录下,标准Maven项目默认已将target目录加入.gitignore,不会被Git识别,不需要额外配置清理规则。
内容的提问来源于stack exchange,提问作者Venkata Rahul S
相关产品推荐
相关产品推荐

