Liquibase 无法找到用于 4.0 及更高版本的集成测试的更改日志文件
Posted
技术标签:
【中文标题】Liquibase 无法找到用于 4.0 及更高版本的集成测试的更改日志文件【英文标题】:Liquibase is unable to find changelog file for integration tests with versions 4.0 and higher 【发布时间】:2021-12-18 21:47:19 【问题描述】:我有一个 Spring Boot 测试来检查 Gradle 嵌入式 Postgres 数据库是否已成功创建。我正在使用TestContainers with the JDBC URL 和 liquibase 的 init 函数。
public class TestcontainersPgIT
public static final String EMBEDDED_JDBC_URL = "jdbc:tc:postgresql:12.5://localhost:5432/postgres?TC_INITFUNCTION=<package names>.db.LiquibaseRunner::runUpdate";
@Test
public void testEmbeddedPg() throws Exception
Connection conn = DriverManager.getConnection(EMBEDDED_JDBC_URL);
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("select 1");
assertTrue(rs.next());
String result = rs.getString(1);
assertEquals("1", result);
上面发生的事情是Connection conn =...
行最终会在下面调用我的 liquibase runner 函数。
public final class LiquibaseRunner
private LiquibaseRunner()
public static void runUpdate(Connection connection) throws LiquibaseException
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
Liquibase liquibase = new liquibase.Liquibase("src/test/resources/db/changelog/db.changelog-test.xml", new FileSystemResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());
创建新的 liquibase 实例并将路径 (Liquibase liquibase = new...
) 传递到更改日志文件的行是任何 Liquibase 版本 >= 4.0 中这些错误的来源。似乎无法在我的tests/resources/db/changelog
目录中找到更改日志文件。我知道这个目录在编译时被复制到 JAR/Build 中,所以我知道文件在那里。它抛出的错误如下所示。
Specifying files by absolute path was removed in Liquibase 4.0. Please use a relative path or add '/' to the classpath parameter.
at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:82)
at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:15)
at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:377)
at liquibase.Liquibase.lambda$update$1(Liquibase.java:230)
at liquibase.Scope.lambda$child$0(Scope.java:160)
at liquibase.Scope.child(Scope.java:169)
at liquibase.Scope.child(Scope.java:159)
at liquibase.Scope.child(Scope.java:138)
at liquibase.Liquibase.runInScope(Liquibase.java:2369)
at liquibase.Liquibase.update(Liquibase.java:217)
at liquibase.Liquibase.update(Liquibase.java:203)
我尝试了许多不同的文件路径来传递,包括使用class path
和相对文件路径,但仍然无法找到用于集成测试的变更日志文件。
我尝试过的文件路径
classpath:db/changelog/db.changelog-test.xml
classpath:/db/changelog/db.changelog-test.xml
相对文件路径
【问题讨论】:
【参考方案1】:您可能只需要这条路径resources/db/changelog/db.changelog-test.xml
或这条路径:../test/resources/db/changelog/db.changelog-test.xml
。
【讨论】:
这两种方法我都试过了,但对我不起作用。以上是关于Liquibase 无法找到用于 4.0 及更高版本的集成测试的更改日志文件的主要内容,如果未能解决你的问题,请参考以下文章
Fody 仅在 MSBuild 16 及更高版本上受支持。当前版本:15
不使用 APNS 的 iOS 4.0 及更高版本的推送服务器
pulltorefresh android 4.1及更高版本[重复]