Невозможно найти путь PostgreSQLContainer testContainers - PullRequest
0 голосов
/ 26 ноября 2018

Я не могу найти свою карту ресурсов при использовании Test Containers , в версии Postgres.Я пытаюсь что-то вроде этого:

     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 не удалось найти ни на одном из этих загрузчиков классов

Структура проекта

enter image description here

Кто-нибудь с той же проблемой?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

withClasspathResourceMapping использует ClassLoader # getResource .Аргумент не относится к вашему классу.Вместо этого он использует текущий путь к классу.В вашем случае он должен работать с:

withClasspathResourceMapping("/db/create.sh", "/docker-entrypoint-initdb.d/00_create.sh")
0 голосов
/ 27 ноября 2018

Использование withClasspathResourceMapping - это когда у вас установлен путь к классам.В моем случае у меня не было, и этот метод не работает.В качестве замены я попытался с addFileSystemBind и работал просто отлично:

postgresqlContainer.addFileSystemBind(scriptsPath + File.separator + "create.sh",
                "/docker-entrypoint-initdb.d/00_create.sh",
                BindMode.READ_ONLY);
...