Java 使用Spring资源加载程序与maven一起运行的测试用例中的FileNotFoundException

Java 使用Spring资源加载程序与maven一起运行的测试用例中的FileNotFoundException,java,spring,maven,junit,filenotfoundexception,Java,Spring,Maven,Junit,Filenotfoundexception,我们的程序正在发送邮件。对于发送邮件,它包括一个附件 这个项目是由maven建立的。JUnit测试用例首先加载spring配置。Spring正在加载文件及其属性。当直接在工作区内运行时,它运行良好,但是作为maven测试,它失败了 资源加载器的Spring配置: <property name="defaultResourceLoader"> <bean class="org.springframework.core.io.DefaultResourceLoader" /

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

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

资源加载器的Spring配置:

<property name="defaultResourceLoader">
    <bean class="org.springframework.core.io.DefaultResourceLoader" />
</property>
例外情况指向实际问题和差异:

java.io.FileNotFoundException:类路径资源[templates/efmaillogo.jpg]无法解析为绝对文件路径,因为它不位于以下文件系统中:jar:file:/C:/IBM/workspace/efMy10/ef mvxsrv reactor/ef mvxsrv service resources/target/ef-mvxsrv-service-resources-1.5.23-SNAPSHOT.jar/模板/efmailvogo.jpg 位于org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:204) 位于org.springframework.core.io.AbstractFileResolvingerSource.getFile(AbstractFileResolvingerSource.java:52) 在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:文件:\C:\Users\uhe.m2\repository\com\claist\ef\mvxsrv\ef-mvxsrv服务资源\1.5.23-SNAPSHOT\ef-mvxsrv-service-resources-1.5.23-SNAPSHOT.jar\templates\efmaillogo.jpg(文件名、目录名或卷标语法不正确。) 在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1141)上 在javax.mail.Transport.send0(Transport.java:195) 在javax.mail.Transport.send(Transport.java:124) 在com.clavisit.ef.ep.service.integration.handler.mail.SendMail.SendMail(SendMail.java:153)上


字符串filePath=defaultResourceLoader.getResource(mailLogo)。getURL().getFile()


上面的代码更改必须按照本线程中的讨论进行

即使扩展了EAR,jar仍然是一个jar吗?在这种情况下,映像可以在服务器上的jar中找到,但在使用Maven的jar中找不到?只是分析了它在服务器上工作的原因。它被放在WEB-INF/classes中。这一个部分有效。不幸的是,我现在在发送邮件时收到FileNotFoundException,而不是在查找邮件时直接收到。将发布问题的更新。我切换到直接使用URL和DataHandler中的URLDataSource。
 String filePath = defaultResourceLoader.getResource(mailLogo).getURL.getFile();