2017-01-25 9 views
0

私は春を学び、Beans.xmlをmain/resourcesフォルダに入れます。私はプロジェクトを管理するためにmavenを使用しています。springがbeans.xmlを見つけることができないのはなぜですか?

しかし実行しているとき、それは

ApplicationContext context = new ClassPathXmlApplicationContext(
       "Beans.xml"); 

エラーが

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [Beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [Beans.xml] cannot be opened because it does not exist. 

は私がのIntelliJを使用しています "メイン" スレッドでの例外であるbeans.xmlのを見つけることができない、理由を知りたいですか?私は春を使用しています。4.3.4

+0

Beans.xmlが実行時にクラスパスに終わると仮定しています。あなたの前提を確認してください。 JVMはそうしないとあなたに伝えます。 Mavenでパッケージングしていますか?このSpringは、Java EEアプリケーションサーバー上のWARまたは実行可能なJARを使用したSpring Bootとしてデプロイされていますか? – duffymo

+0

どのようにアプリケーションを実行していますか? –

+0

"Run Main"を使って実行していますが、WARやJARにはパッケージしません –

答えて

0
new ClassPathXmlApplicationContext("file:src/main/resources/beans.xml"); 

ファイル:プレフィックスはクラスパスではなくファイルシステムのリソースを指しています。

+0

それは動作しますが、beans.xmlを指定するだけの設定変更があります –

+1

これが有効なら、ファイルの名前は 'beans.xml'であり、' Beans.xml'ではありません。アプリケーションをデプロイする(またはjarファイルを作成する)とすぐに壊れるので、この答えに記載されている構文を使用しないでください。これはあなたのIDEでのみ動作します。 'new ClassPathXmlApplicationContext(" beans.xml ")'を使用して、大文字の開始文字の代わりに小文字を確認します。 –

+0

ケースに関係ありません。私は窓を使用しているので、大文字と小文字は区別されません\ –

0

@ Hiccupの答えは正しいですが、あなたのアプリケーションがFileSystemに依存している場合( "file:"接頭辞を使用)、このアプリケーションをパッケージ化してjavaコマンドで実行すると、同じものが投げられる例外は、あなたがこのプレフィックスを追加することができます

ApplicationContext context = new ClassPathXmlApplicationContext(
      "classpath:Beans.xml"); 

をしかし、これはメイン/ resourcesフォルダからリソースを検索するのIntelliJを伝えるために、あなたがMavenを設定しているだけの場合は、正しい(またはAntやアイビー)です。

したがって、以前の確認があなたのケースでない場合は、Beans.xmlをsrc/main/javaに移動する必要があります。

関連する問題