4

在 Postgres 版本中使用Test Containers时,我无法找到我的资源图。我正在尝试类似的东西:

     private static PostgreSQLContainer postgresqlContainer = new PostgreSQLContainer("postgres")
            .withDatabaseName(DATABASE_NAME)
            .withUsername(USER)
            .withPassword(PASSWORD);

    @ClassRule
    @BeforeAll
    public static void initContainer() {
        postgresqlContainer.withExposedPorts(5432);

        postgresqlContainer.withClasspathResourceMapping("../../../../../../../create.sh",
                "/docker-entrypoint-initdb.d/00_create.sh",
                BindMode.READ_ONLY);
        postgresqlContainer.start();
}

但是,我找不到该文件。我什至尝试将脚本 create.sh 包含在同一目录中,但找不到:

java.lang.IllegalArgumentException:在这些类加载器中的任何一个上都找不到路径为 ../../../../../../../create.sh 的资源

项目结构

在此处输入图像描述

有同样问题的人吗?

4

2 回答 2

2

的用法withClasspathResourceMapping是当您设置了类路径时。就我而言,我没有,而且这种方法不起作用。作为替代,我尝试使用 addFileSystemBind 并且工作得很好:

postgresqlContainer.addFileSystemBind(scriptsPath + File.separator + "create.sh",
                "/docker-entrypoint-initdb.d/00_create.sh",
                BindMode.READ_ONLY);
于 2018-11-27T19:45:18.640 回答
1

withClasspathResourceMapping使用ClassLoader#getResource。该论点与您的班级无关。相反,它使用当前的类路径。在您的情况下,它应该与:

withClasspathResourceMapping("/db/create.sh", "/docker-entrypoint-initdb.d/00_create.sh")
于 2018-11-29T09:27:59.230 回答