由以下原因导致的Intellij类路径错误:java.io.FileNotFoundException
Intellij项目的目录:由以下原因导致的Intellij类路径错误:java.io.FileNotFoundException,java,spring,intellij-idea,classpath,Java,Spring,Intellij Idea,Classpath,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配置
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配置(来自alternate datasource config.xml):
但是,如果我将目录修改为:
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 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>
并修改我的bean配置:
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 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>
classpath:rewards/testdb/config/schema.sql
classpath:rewards/testdb/config/test-data.sql
…我的考试通过。
为什么?Spring将资源引用解释为相对于(您的测试类)。您应该始终确保在资源引用中使用绝对路径,即:
<value>classpath:/rewards/testdb/schema.sql</value>
<value>classpath:/rewards/testdb/test-data.sql</value>
classpath:/rewards/testdb/schema.sql
classpath:/rewards/testdb/test-data.sql
(注意资源规范中的初始正斜杠)在您的idea项目配置中,将目标路径指向您的项目目标文件夹:编辑配置->部署->编辑工件(单击铅笔图标)->将“输出目录”输入设置为“您的项目文件夹\路径/目标” 然后,无论何时编辑jdbc.properties文件,它都会在重新启动后生效
这对maven web项目有效。您应该将资源放在
src\main\resources
中。否则Xml文件将不会复制到类路径。那么为什么它会在第二个路径中通过呢?这确实不重要,但可能是因为您是从IDE内部执行此操作的:您是否尝试将资源移动到正确的目录:src/main/resources
或src/test/resources
?