Причины java.io.FileNotFoundException: ресурс пути к классу [services.xml ] не может быть открыт, потому что он не существует

#spring #web-applications #maven #websphere #rad

#весна #веб-приложения #maven #websphere #рад

Вопрос:

У меня есть веб-приложение на RAD 7.5. Я создаю приложение с использованием Maven и развертываю на WebSphere 6.1.

Часть моего web.xml является:

 <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:services.xml</param-value>
</context-param>
 

Это единственное место, на которое я ссылаюсь services.xml .

Мой services.xml находится в папке

 FruitApplication/src/main/resources/services.xml
 

После сборки с помощью maven, services.xml находится по следующему пути в целевой папке

 target/FruitApplication-1.0.0/WEB-INF/classes/services.xml
 

При развертывании я постоянно получаю указанную ниже ошибку. Однако при создании приложения два-три раза оно исчезает само по себе, а затем снова появляется случайно.

Какова фактическая причина этой ошибки? Как устранить эту ошибку?

Верхняя часть моего services.xml выглядит как:

 <?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
 

Здесь что-то нужно изменить???

Ниже приведен полный pom.xml Я использую для «maven-install»:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>FruitApplication</groupId>
  <artifactId>FruitApplication</artifactId>
  <packaging>war</packaging>
  <version>1.0.0</version>

 <build> 
  <plugins>
    <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.0.1</version>
        <configuration>
        <archive>
              <manifestFile>
            src/main/webapp/META-INF/MANIFEST.MF
          </manifestFile>
        </archive>
        </configuration>
    </plugin>
  </plugins>
 </build> 

 <dependencies>
        ... dependencies here ...
 </dependencies>

</project>
 

Я уже попробовал все три нижеприведенных варианта:

 <param-value>classpath:services.xml</param-value>
<param-value>classpath:/services.xml</param-value>
<param-value>WEB-INF/classes/services.xml</param-value>
 

Как я развертываю:

Я удаляю приложение с сервера, щелкнув правой кнопкой мыши на сервере и «добавить или удалить приложения»

Я выполняю запуск как «maven-clean», а затем запускаю как «maven-install» в приложении и снова добавляю приложение, щелкнув правой кнопкой мыши на сервере и «добавить или удалить приложения»

Комментарии:

1. Когда вы получаете эту ошибку, проверяете ли вы файл WAR, чтобы увидеть, действительно ли файл находится там, где вы его ожидаете?

2. Как вы развертываете? Просто удаление сгенерированной maven войны в контейнере? Можете ли вы включить свою часть build-> resources вашего pom в вопрос?

3. Вы получаете ошибку в RAD, Websphere или обоих? Как предложил @smp7d, используйте этап ресурсов и укажите путь для копирования services.xml к явному каталогу WEB-INF/classes и WEB-INF. Хотя WEB-INF отсутствует в classpath, попробуйте.

4. Ошибка возникает после того, как я добавляю приложение на сервер и когда оно развертывается сервером. Поэтому я думаю, что это будет ошибка websphere … верно?

Ответ №1:

Вы пробовали classpath:/services.xml ? Начальная косая черта означает извлечение ресурса из корня пути к классу. Ожидается, что без него файл будет находиться в пакете любого класса, который его загружает (что, я признаю, я не знаю, что это будет в данном случае).

Смотрите http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.Строка)

Ответ №2:

  1. Выберите проект, в котором существуют исходные файлы.Щелкните правой кнопкой мыши — Путь сборки — настройка пути сборки — источники -Добавить папку — добавьте папку, в которой существует ваш файл ресурсов.Это добавило бы папку к вашему пути к классу.
  2. Если указанный выше проект / jar является частью другого WAR / EAR, выберите этот WAR и / или EAR — properties — j2ee module dependecies и выберите указанный выше проект, чтобы его добавили в путь сборки. Перезапустите сервер.

Ответ №3:

Выясните, является ли его Websphere / RAD или проблема с приложением?

Сначала создайте файл war и поместите его в контейнер Tomcat и проверьте, по-прежнему ли вы видите ошибку. 1. Если вы видите, затем скопируйте services.xml перейдите в каталог WEB-INF и WEB-INF / classes и посмотрите, работает ли это. 2. Также проверьте системную переменную среды CLASSPATH, system CLASSPATH может переопределить путь к классу вашего приложения.

Если с Tomcat все в порядке, есть что-то специфичное для Websphere / RAD: 3. Проверьте среду websphere, я помню, что в websphere есть какая-то опция, в которой вы можете установить / переопределить / префикс пути к классу.