簡體   English   中英

Spring 中的 FileNotFoundException

[英]FileNotFoundException in Spring

我無法解決問題。

完整的堆棧跟蹤:

12:14:08.172 [main] DEBUG o.s.core.env.StandardEnvironment - Adding    [systemProperties] PropertySource with lowest search precedence
12:14:08.178 [main] DEBUG o.s.core.env.StandardEnvironment - Adding [systemEnvironment] PropertySource with lowest search precedence
12:14:08.178 [main] DEBUG o.s.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [systemProperties,systemEnvironment]
12:14:08.183 [main] INFO  o.s.c.s.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@24273305: startup date [Thu Mar 16 12:14:08 GMT 2017]; root of context hierarchy
12:14:08.222 [main] DEBUG o.s.core.env.StandardEnvironment - Adding [systemProperties] PropertySource with lowest search precedence
12:14:08.223 [main] DEBUG o.s.core.env.StandardEnvironment - Adding [systemEnvironment] PropertySource with lowest search precedence
12:14:08.223 [main] DEBUG o.s.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [systemProperties,systemEnvironment]
12:14:08.233 [main] INFO  o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [org/postprocessor/config/dataSupport.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [org/postprocessor/config/dataSupport.xml]; nested exception is java.io.FileNotFoundException: class path resource [org/postprocessor/config/dataSupport.xml] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:612)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:513)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at org.postprocessor.dao.DaoMain.main(DaoMain.java:12)
Caused by: java.io.FileNotFoundException: class path resource [org/postprocessor/config/dataSupport.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
... 13 more

Bean 配置文件dataSupport.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- <bean/> definitions here -->
<context:annotation-config />
<context:component-scan base-package="org.postprocessor.dao" />
<context:component-scan base-package="org.postprocessor.model" />
<context:component-scan base-package="org.postprocessor.util" />



<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" 
        /> <property name="url" value="jdbc:derby:postprocessor;create=true;" />
<!--    <property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver" />
    <property name="url" value="jdbc:derby://localhost:1527/db;create=true;" /> -->
    <property name="initialSize" value="1" />
    <property name="maxActive" value="1" />
</bean>

<bean id="daoImpl" class="org.postprocessor.dao.DaoImpl" scope="prototype">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>resourceBundles/general</value>
            <value>resourceBundles/codeLists/codelist_eortcqlqc30</value>
            <value>resourceBundles/codeLists/codelist_eortcqlqlc13</value>
            <value>resourceBundles/codeLists/codelist_eq5d3l</value>
            <value>resourceBundles/codeLists/codelist_eq5d5l</value>
            <value>resourceBundles/codeLists/codelist_noncompletedquestionnaires</value>
            <value>resourceBundles/codeLists/codelist_pgis</value>
            <value>resourceBundles/codeLists/codelist_silc</value>
        </list>
    </property>
</bean>

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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>SBP</groupId>
<artifactId>SBP</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gt20047</name>
<packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-asm -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-asm</artifactId>
        <version>3.1.4.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/asm/asm-all -->
    <dependency>
        <groupId>asm</groupId>
        <artifactId>asm-all</artifactId>
        <version>3.3.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.derby/derbynet -->
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derbynet</artifactId>
        <version>10.12.1.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.derby/derbyclient -->
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derbyclient</artifactId>
        <version>10.12.1.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>2.0.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-pool/commons-pool -->
    <dependency>
        <groupId>commons-pool</groupId>
        <artifactId>commons-pool</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>3.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.3.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>19.0</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/commons-collections/commons-collections -->
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.0</version>
    </dependency>


    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-csv</artifactId>
        <version>1.3</version>
    </dependency>

    <dependency>
        <groupId>net.lingala.zip4j</groupId>
        <artifactId>zip4j</artifactId>
        <version>1.3.2</version>
    </dependency>
</dependencies>

<build>
<finalName>gt20047</finalName>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3</version>
            <configuration>

              <archive>
                <manifest>
                    <!-- Jar file entry point -->
                    <mainClass>org.postprocessor.dao.DaoMain</mainClass>
                </manifest>
              </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

我無法弄清楚問題出在哪里,我的 jar 文件沒有這個配置文件夾在此處輸入圖片說明

道主.java

package org.postprocessor.dao;

import java.io.File;

import org.postprocessor.util.FileZipper;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DaoMain {
    public static void main(String[] args) {
        ApplicationContext ctx= new ClassPathXmlApplicationContext("classpath:/org/postprocessor/config/dataSupport.xml");
        DaoImpl daoImpl=null;
        FileZipper fileZipper=null;
        try{
            daoImpl= ctx.getBean("daoImpl",DaoImpl.class);
            fileZipper= ctx.getBean("fileZipper",FileZipper.class);
            daoImpl.startProcess();
            fileZipper.zipFile(new File("").getAbsolutePath()+"/output");
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally{
            ((ClassPathXmlApplicationContext) ctx).close();
        }
      }
    }
  • 如何解決這個問題?

看起來主要問題出在這一行:

new ClassPathXmlApplicationContext("classpath:/org/postprocessor/config/dataSupport.xml");

您正在嘗試從classpath構建上下文。 因此,您必須找到可從項目的類路徑訪問的配置文件。

您使用Maven來構建您的項目。 Maven 為代碼源定義了項目結構:

/src/main/java 

資源

/src/main/resorces

您可以在此處找到更多信息: 標准目錄布局簡介

如果您想從類路徑訪問您的文件,您必須將其完全放在- resources/文件夾下:

在此處輸入圖片說明

現在你的main()會是這樣的:

public static void main(String[] args) {
    ApplicationContext ctx= new ClassPathXmlApplicationContext("classpath:config/dataSupport.xml");
    Object dataSource = ctx.getBean("userRepo");
    System.out.println(dataSource.getClass().getName());
    // use your beans here

我只創建了演示 bean。 這是輸出:

2017-03-20 15:22:40 INFO  ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@16f65612: startup date [Mon Mar 20 15:22:40 EET 2017]; root of context hierarchy
2017-03-20 15:22:40 INFO  XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [config/dataSupport.xml]
demo.repository.UserRepository

順便說一句,您可以將try 與應用程序上下文的資源一起使用:

try(ClassPathXmlApplicationContext ctx =
    new ClassPathXmlApplicationContext("classpath:config/dataSupport.xml")) {
    // use your beans here
}

其他資源

您的 XML 文件格式不正確。

雖然我不知道這是否是問題所在,但它可能是您的項目最初沒有正確獲取文件的根本原因。

您的<beans>標簽沒有結束標簽。 嘗試將</beans>放在文件末尾。

此外,您的pom.xml文件也有同樣的問題。 <project>未關閉。 嘗試將</project>放在文件末尾。

我認為以下應該有效:

ApplicationContext ctx= new ClassPathXmlApplicationContext("org/postprocessor/config/dataSupport.xml");

您不需要指定“classpath”,因為您已經使用了 ClassPathXmlApplicationContext,並且開頭有額外的斜線。

移動:

src/org/postprocessor/config/dataSupport.xml

到:

src/main/resources/org/postprocessor/config/dataSupport.xml

默認情況下 maven-compiler-plugin 不包含非 java 文件。 這給你留下了兩個選擇。
1. 將您的資源文件(.properties、.xml 等)移動到“src/main/resources”(推薦。)
2.使用maven資源插件

 <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <executions>
      <execution>
        <id>copy-resources</id>
        <phase>validate</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${basedir}/path/where/you/want</outputDirectory>
          <resources>
            <resource>
                <directory>${basedir}</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM