使用 Maven,我的 pom.xml 中有 liquibase-core 依赖项:
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.27.0</version>
</dependency>
当我执行时
CommandScope updateCommand = new CommandScope("update")
.addArgumentValue("driver", String.valueOf(map.get("driver")))
.addArgumentValue("url", String.valueOf(map.get("liquibase.command.url")))
.addArgumentValue("username", String.valueOf(map.get("liquibase.command.username")))
.addArgumentValue("password", String.valueOf(map.get("liquibase.command.password")))
.addArgumentValue(UpdateCommandStep.CHANGELOG_FILE_ARG, LIQUIBASE_CHANGELOG_FILE)
.addArgumentValue(UpdateCommandStep.CONTEXTS_ARG, String.valueOf(map.get("contexts")));
updateCommand.execute();
我在 updateCommand.execute() 上遇到以下错误
liquibase.servicelocator.null Cannot load service
java.util.ServiceConfigurationError: liquibase.parser.ChangeLogParser: com.datical.liquibase.ext.parser.ProFormattedSqlChangeLogParser Unable to get public no-arg constructor
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:581)
at java.base/java.util.ServiceLoader.getConstructor(ServiceLoader.java:672)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1232)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1264)
at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1299)
at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1384)
at liquibase.servicelocator.StandardServiceLocator.findInstances(StandardServiceLocator.java:22)
at liquibase.parser.ChangeLogParserFactory.<init>(ChangeLogParserFactory.java:39)
at liquibase.parser.ChangeLogParserFactory.getInstance(ChangeLogParserFactory.java:25)
at liquibase.command.core.helpers.DatabaseChangelogCommandStep.getDatabaseChangeLog(DatabaseChangelogCommandStep.java:124)
at liquibase.command.core.helpers.DatabaseChangelogCommandStep.run(DatabaseChangelogCommandStep.java:87)
at liquibase.command.CommandScope.execute(CommandScope.java:219)
liquibase.parser.ChangeLogParser 类中似乎缺少一个无参数构造函数。
我可以添加缺少的依赖项或配置来修复此错误吗?
看来 liquibase-core 也带来了 liquibase-commercial。你能尝试排除它吗?
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.27.0</version>
<exclusions>
<exclusion>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-commercial</artifactId>
</exclusion>
</exclusions>
</dependency>