Как указать путь к сопоставлениям WireMock и файлам, присутствующим внутри исполняемого Spring Boot Jar?

Я создал WireMock как приложение для весенней загрузки, используя зависимость spring-cloud-contract-wiremock. Я сохранил отображение и _files в папке src / test / resources.

Когда я запускаю приложение из IDE, оно работает отлично. Но когда я запускаю Jar напрямую, он дает исключение fileNotFoundException.

<pre>java.lang.RuntimeException: java.io.FileNotFoundException: C:\Users\{user}\Downloads\src\test\resources\__files\....

Содержимое моего файла application.yml:

spring:
main:
    web-application-type: none
  application:
    name: wiremock-service
    
wiremock:
  server:
    files: classpath:/__files
    stubs: classpath:/mappings

Основной класс:

public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
    @Bean
    public Options wireMockOptions() throws IOException {

        final WireMockConfiguration options = WireMockSpring.options();
        //options.withRootDirectory("classpath*:");
        options.port(9990);

        return options;
    }

}

Как мне указать путь для _files и сопоставлений, чтобы я мог запускать их независимо из любого места?


person Roshni    schedule 24.07.2020    source источник
comment
Вы заметили в ошибке, что ваше приложение обращается к тестовой папке? \src\test\resources` This could be part of issue, ussualy during normal run \ src \ main \ resources` должен быть доступен   -  person user2851729    schedule 24.07.2020
comment
По-видимому, src / test / resources был местоположением по умолчанию, используемым классом WireMockConfiguration для поиска сопоставлений. Мне пришлось переопределить значение по умолчанию, установив fileSource.   -  person Roshni    schedule 25.07.2020


Ответы (3)


Спасибо всем за ваши предложения.

Я смог заставить его работать, добавив ниже в свой основной класс

FileSource fileSource = new SpringClasspathResourceFileSource("stub");
options.fileSource(fileSource);

SpringClasspathResourceFileSource - это обычный класс, реализующий интерфейс FileSource. stub - это папка, которую я создал внутри src / main / resources. Объект fileSource вернул uri вашей папки из пути к классам вашего приложения.

person Roshni    schedule 25.07.2020

Вы можете изменить путь, по которому WireMock будет искать /mappings и /__files, используя один из этих методов определения местоположения файлов. .

    public Options wireMockOptions() throws IOException {

        final WireMockConfiguration options = WireMockSpring.options();
        options.usingFilesUnderDirectory("classpath*:");
        options.port(9990);

        return options;
    }

Признаюсь, я не использовал WireMock со Spring, поэтому здесь все может быть немного иначе.

person agoff    schedule 24.07.2020

Если вы просто запускаете приложение в обычном режиме, тестовые ресурсы не будут найдены, поскольку они обычно не включаются в сгенерированный файл jar. Вам нужен Wiremock для тестов или для фактического запуска приложения? В последнем случае вам необходимо переместить файлы по обычному пути к ресурсам src / main / resources.

person Frank Hopkins    schedule 24.07.2020