Не удалось найти путь PostgreSQLContainer testContainers

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

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

введите здесь описание изображения

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


person Julia Bel    schedule 26.11.2018    source источник


Ответы (2)


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

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

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

withClasspathResourceMapping("/db/create.sh", "/docker-entrypoint-initdb.d/00_create.sh")
person bsideup    schedule 29.11.2018