2017-01-25 3 views
0

Я изучаю весну и помещаю Beans.xml в папку main/resources. Я использую maven для управления проектом.Почему весна не может найти beans.xml?

Однако при запуске, он не может найти 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, хотите знать, почему? Я использую весну 4.3.4

+0

Вы предполагаете, что Beans.xml заканчивается в пути к классам во время выполнения. Проверьте свои предположения. JVM говорит вам, что нет. Вы упаковываете с Maven? Является ли эта Spring развернута как WAR на сервере приложений Java EE или Spring Boot с исполняемым JAR? – 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"); 

Но это верно только если вы настроили Maven (или Ant или Ivy), чтобы сказать IntelliJ, чтобы найти ресурсы из основной папки/ресурсов.

Итак, если предыдущее утверждение не ваше дело, вам нужно переместить Beans.xml в src/main/java.

Смежные вопросы