gpt4 book ai didi

java - 使用 Spring 资源加载器与 Maven 一起运行的测试用例中的 FileNotFoundException

转载 作者:行者123 更新时间:2023-11-30 09:35:53 25 4
gpt4 key购买 nike

我们的程序正在发送邮件。对于发送邮件,它包含一个附件。

项目是用maven建立的。 JUnit 测试用例首先加载 spring 配置。 Spring 正在使用其 DefaultResourceLoader 加载文件.当直接在工作区内运行它时它运行良好,但是作为 Maven 测试它失败了。

资源加载器的 Spring 配置:

<property name="defaultResourceLoader">
<bean class="org.springframework.core.io.DefaultResourceLoader" />
</property>

实现类:

@Service
public class SomeClassA {

@Autowired
private DefaultResourceLoader defaultResourceLoader;

@Value("${mailLogoPath}")
private String mailLogo;

public void someMethod(){
String filePath = defaultResourceLoader.getResource(mailLogo).getFile().getAbsolutePath();
}
}

异常指向实际问题及区别:

java.io.FileNotFoundException: class path resource [templates/efmaillogo.jpg] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/C:/IBM/workspace/efMy10/ef-mvxsrv-reactor/ef-mvxsrv-service-resources/target/ef-mvxsrv-service-resources-1.5.23-SNAPSHOT.jar!/templates/efmaillogo.jpg at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:204) at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:52) at SomeClassA.someMethod(SomeClassA.java:9)

Spring 尝试在 jar 中查找文件。在 eclipse 中将它作为 junit 测试运行时,一切正常,因为 spring 直接在工作区中找到该文件。但是,当使用 Maven 运行相同的单元测试时,它会失败,因为它找不到文件,因为它在不同模块的 jar 中。另一个模块中的文件是不同模块需要的,所以我不想移动它。在部署了所有内容的应用程序服务器上,它也能正常工作,因为 .ear 文件已展开。

我想知道是否有其他方法可以使用 Spring 访问文件,这样我就不必跳过这个使用 maven 的测试用例。

更新尝试查找文件:

 String filePath = defaultResourceLoader.getResource(mailLogo).getURL.getFile();

然而,当使用 Transport.send(msg) 实际发送邮件时,它现在失败了。

java.io.FileNotFoundException: file:\C:\Users\uhe.m2\repository\com\clavisit\ef\mvxsrv\ef-mvxsrv-service-resources\1.5.23-SNAPSHOT\ef-mvxsrv-service-resources-1.5.23-SNAPSHOT.jar!\templates\efmaillogo.jpg (The filename, directory name, or volume label syntax is incorrect.) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1141) at javax.mail.Transport.send0(Transport.java:195) at javax.mail.Transport.send(Transport.java:124) at com.clavisit.ef.ep.service.integration.handler.mail.SendMail.sendMessage(SendMail.java:153)

最佳答案

String filePath = defaultResourceLoader.getResource(mailLogo).getURL().getFile();

以上代码更改必须按照此线程中的讨论工作 http://www.coderanch.com/t/474047/Spring/Spring-cannot-find-file-classpath

关于java - 使用 Spring 资源加载器与 Maven 一起运行的测试用例中的 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com