2

私たちのプログラムはメールを送っています。メールを送信するための添付ファイルが含まれています。

プロジェクトはMavenで設定されています。JUnitテストケースは、最初にスプリング構成をロードします。SpringはDefaultResourceLoaderを使用してファイルをロードしています。これをワークスペース内で直接実行すると、正常に実行されますが、Mavenテストとしては失敗します。

リソースローダーのSpring構成:

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

ImplementationClass:

@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:クラスパスリソース[templates / efmaillogo.jpg]は、ファイルシステムに存在しないため、絶対ファイルパスに解決できません:jar:file:/ C:/ IBM / worksheet / 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)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(ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません。)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)

4

1 に答える 1

2

文字列 filePath = defaultResourceLoader.getResource(mailLogo)。getURL() .getFile();

上記のコード変更は、このスレッドhttp://www.coderanch.com/t/474047/Spring/Spring-cannot-find-file-classpathの説明に従って機能する必要があります

于 2012-06-18T08:58:07.910 に答える