无法获取 Liquibase 的 ChangeLogParser 的公共无参数构造函数

问题描述 投票:0回答:1

使用 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 类中似乎缺少一个无参数构造函数。

我可以添加缺少的依赖项或配置来修复此错误吗?

java maven liquibase liquibase-maven-plugin
1个回答
0
投票

看来 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>
© www.soinside.com 2019 - 2024. All rights reserved.