2

我使用“spring-cloud-contract-wiremock”依赖项将 WireMock 构建为 Spring Boot 应用程序。我将映射和 _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 和映射的路径,以便我可以从任何位置独立运行?

4

4 回答 4

3

谢谢大家的建议。

我能够通过在我的主类中添加以下内容来使其工作

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

SpringClasspathResourceFileSource 是一个实现 FileSource 接口的普通类。“存根”是我在 src/main/resources 中创建的文件夹。fileSource 对象已从应用程序的类路径返回文件夹的 uri。

于 2020-07-25T09:21:11.713 回答
1

如果您只是正常运行应用程序,则不会找到测试资源,因为它们通常不包含在生成的 jar 文件中。您是否需要 Wiremock 进行测试或实际运行应用程序?如果是后者,您需要将文件移动到正常的资源路径“src/main/resources”中。

于 2020-07-24T13:43:20.407 回答
1

您可以更改 WireMock 查找的路径,/mappings/__files使用这些文件定位方法之一。

    public Options wireMockOptions() throws IOException {

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

        return options;
    }

我承认我没有在 Spring 中使用过 WireMock,所以这里的情况可能会有所不同。

于 2020-07-24T13:38:14.693 回答
0

我在 Spring Boot 应用程序中没有 HTTP Server 的情况下运行 Wiremock 时遇到了类似的问题。设法通过在路径前加上“BOOT-INF/classes/”来使其工作

在 IDE 中运行:

usingFilesUnderClasspath("wiremock")

从 jar 运行时:

usingFilesUnderClasspath("BOOT-INF/classes/wiremock")
于 2022-01-11T11:11:11.303 回答