繁体   English   中英

Intellij类路径错误原因:java.io.FileNotFoundException

[英]Intellij classpath error Caused by: java.io.FileNotFoundException

Intellij项目的目录:

src/main/java/rewards/testdb/schema.sql
src/main/java/rewards/testdb/test-data.sql
src/main/java/rewards/testdb/config/alternate-datasource-config.xml
src/main/java/rewards/testdb/config/AlternateDataSourceConfigTests.java

受测试的Bean配置(来自alter-datasource-config.xml):

<bean id="dataSource-createdFromList" class="org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean" lazy-init="true">
    <property name="databaseName" value="rewards" />
    <property name="databasePopulator">
        <bean class="org.springframework.jdbc.datasource.init.ResourceDatabasePopulator">
            <property name="scripts">
                <util:list>
                    <value>classpath:rewards/testdb/schema.sql</value>
                    <value>classpath:rewards/testdb/test-data.sql</value>
                </util:list>
            </property>
        </bean>
    </property>
</bean>

我在单元测试中遇到错误:

Caused by: java.io.FileNotFoundException: class path resource [rewards/testdb/schema.sql] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)

但是,如果我将目录修改为:

src/main/java/rewards/testdb/config/schema.sql
src/main/java/rewards/testdb/config/test-data.sql
src/main/java/rewards/testdb/config/alternate-datasource-config.xml
src/main/java/rewards/testdb/config/AlternateDataSourceConfigTests.java

并修改我的bean配置:

<bean id="dataSource-createdFromList" class="org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean" lazy-init="true">
        <property name="databaseName" value="rewards" />
        <property name="databasePopulator">
            <bean class="org.springframework.jdbc.datasource.init.ResourceDatabasePopulator">
                <property name="scripts">
                    <util:list>
                        <value>classpath:rewards/testdb/config/schema.sql</value>
                        <value>classpath:rewards/testdb/config/test-data.sql</value>
                    </util:list>
                </property>
            </bean>
        </property>
    </bean>

...我的测试通过了。

为什么?

在您的Idea项目配置中,将目标路径指向项目目标文件夹:Edit Configurations-> Deployment-> Edit Artifact(单击铅笔图标)->将“ Output Directory”输入设置为“ your_project_folder_path / target”,然后在每次编辑jdbc时使用。属性文件,此操作将在重新启动后生效。

这对Maven Web项目有效。

Spring会将资源引用解释为相对于(相对于您的测试类的)资源引用。 您应该始终确保在资源引用中使用绝对路径,即:

<value>classpath:/rewards/testdb/schema.sql</value>
<value>classpath:/rewards/testdb/test-data.sql</value>

(请注意资源规范中的初始正斜杠)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM