java.io.FileNotFoundException的原因:无法打开类路径资源[services.xml],因为它不存在

时间:2011-11-01 07:14:54

标签: spring web-applications maven websphere rad

我在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">

这里有什么需要改变的吗?

下面是我用于“maven-install”的完整pom.xml:

<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”,再次通过右键单击服务器添加应用程序并“添加或删除应用程序”

3 个答案:

答案 0 :(得分:3)

你试过classpath:/services.xml吗?前导斜杠意味着从类路径的根中提取资源。没有它,文件应该在任何类加载它的包中(我承认我不知道在这种情况下会是什么)。

请参阅http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#getResourceAsStream%28java.lang.String%29

答案 1 :(得分:1)

  1. 选择存在资源文件的项目。右键单击 - 构建路径 - 配置构建路径 - 来源 - 添加文件夹 - 添加资源文件所在的文件夹。这会将文件夹添加到类路径。

  2. 如果上面的项目/ jar是另一个WAR / EAR的一部分,那么选择WAR和/或EAR - 属性 - j2ee模块依赖,并选择上面的项目以添加到构建路径。 重启服务器。

答案 2 :(得分:0)

弄清楚它的Websphere / RAD或应用程序是否有问题?

首先构建war文件并将其放入Tomcat容器中,然后检查是否仍然看到错误。 1.如果您看到然后将services.xml复制到WEB-INF和WEB-INF / classes目录并查看它是否有效。 2.另外检查CLASSPATH系统环境变量,系统CLASSPATH可以覆盖您的应用程序类路径。

如果Tomcat的一切正常,那么Websphere / RAD就有一些特定的东西: 3.检查websphere环境,我记得在websphere中有一些选项可以设置/覆盖/前缀类路径。