【问题标题】:Access file present in /test/resources - classpath issue/test/resources 中存在的访问文件 - 类路径问题
【发布时间】:2018-10-26 05:04:08
【问题描述】:

我正在开发一个 Spring 多模块项目。其中一个子模块在 /test/resources/certs/ 下有一些文件,在 /test/resources/test-ssl.properties 下有一个属性文件。

───resources │ test-ssl.properties ├───certs │ test-keystore.p12

test-ssl.properties 有一个指向/certs/test-keystore.p12file 的属性。

server.ssl.trust-store=/certs/test-keystore.p12

在子模块 pom.xml 中,我使用 Maven 插件 test-jar,在父 pom 中,我将此模块添加为依赖项。

在父模块中存在此结构集成测试能够成功读取classpath:test-ssl.properties,但无法解析其属性值。

弹簧投掷FileNotFoundException: \certs\test-keystore.p12。我们可以做些什么改变让 Spring 读取测试 jar 中存在的文件?

还尝试了以下模式,

server.ssl.trust-store=classpath:/certs/test-keystore.p12

server.ssl.trust-store=classpath:certs/test-keystore.p12

server.ssl.trust-store=classpath*:/certs/test-keystore.p12

请注意,此测试属性不会尝试加载任何证书。它在那里是因为属性占位符可以在构建期间为属性找到一些值。

【问题讨论】:

  • 我希望文件在src/test/resources 下?类路径条目应类似于 classpath:/test-ssl.properties ...
  • 试过这个但不行。 Spring能够成功读取test-ssl.properties文件但server.ssl.trust-store属性的值。
  • 我不确定 spring 本身是否可以读取证书文件,因为必须在 JVM 启动期间完成证书...
  • 此测试属性不加载任何证书,它存在以便属性占位符可以在集成测试期间找到一些属性。这可以是任何扩展名的任何文件。

标签: java spring maven


【解决方案1】:

通过将integration-test 阶段更改为process-test-resources 来解决问题。

归功于Pascal Thivent的以下回答:

测试输出目录(target/test-classes)的内容在类路径上,而不是src/test/resources。但是 src/test/resources 下的资源被resources:testResources 目标(默认绑定到 process-test-resources 阶段)复制到测试输出目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2019-12-21
    • 2014-05-29
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多