执行mvn liquibase:update提示未指定数据库URL错误如何解决
错误修复方案
根因分析
当前报错有两个核心原因:
pom.xml中Liquibase插件的配置仅绑定了生命周期阶段,命令行直接调用mvn liquibase:update时不会读取execution内部的配置,导致无法定位到liquibase.properties文件liquibase.properties中数据库URL配置存在非法换行,serverTime和zone=UTC被拆分为两行,导致URL参数不完整,就算读取到配置文件也无法识别有效URL
修复步骤
1. 调整pom.xml配置层级
将Liquibase插件的configuration节点从execution内部移出,放到plugin直接子层级,保证命令行调用和生命周期绑定都会生效:
<build> <plugins> <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>4.6.1</version> <!-- 全局配置,命令行调用和生命周期绑定都会生效 --> <configuration> <propertyFile>./src/main/resources/liquibase.properties</propertyFile> <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> </configuration> <executions> <execution> <phase>process-resources</phase> <goals> <goal>update</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
2. 修复liquibase.properties的URL换行问题
把拆分的URL参数合并为完整一行,同时删除changeLogFile末尾的多余空格:
changeLogFile=./src/main/resources/master.xml driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/recruitment?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC username=root password=********* verbose=true dropFirst=false
3. 验证执行
修复完成后重新运行命令即可:
mvn liquibase:update
如果仍有异常,可以直接在命令行指定配置文件路径做临时验证:
mvn liquibase:update -Dliquibase.propertyFile=src/main/resources/liquibase.properties
可选优化(非本次报错必填)
当前master.xml中sqlFile的路径可以简化,无需写全路径,直接写path="tables_creation.sql"即可,因为changeLog本身已经在resources目录下,Liquibase会自动从当前文件所在目录查找引用资源。
内容的提问来源于stack exchange,提问作者Dmitry Polischuk
相关产品推荐
相关产品推荐

