IntelliJ IDEA Maven Spring项目bean.xml存在却报FileNotFoundException问题咨询
问题根因分析
- Maven项目默认构建规则差异:IntelliJ IDEA对标准Maven项目的默认构建配置中,
src/main/java目录仅会识别编译.java后缀的文件,其余类型的资源文件(包括你放在该目录下的personbean.xml)不会被自动拷贝到编译输出的classpath目录。你调用ClassPathXmlApplicationContext("personbean.xml")是从类路径加载资源,自然找不到文件抛出FileNotFoundException。 - Eclipse构建逻辑不同:Eclipse的默认构建逻辑会将
src/main/java下所有非java类型的资源文件一并拷贝到输出的类路径目录下,所以导入Eclipse后可以正常运行找到配置文件。 - 后续IDEA恢复正常的原因:Eclipse运行项目时已经将
personbean.xml拷贝到了项目的编译输出目录(一般为target/classes),IDEA再次运行时会直接复用已存在的编译产物,因此可以正常找到文件,并非IDEA自身配置生效。
后续开发规避方案
不会每次新增xml配置都出现相同问题,只要按以下任意一种方案调整即可:
- 方案一(推荐):遵循Maven标准目录结构,将所有xml等配置资源文件放到
src/main/resources目录下,该目录是Maven默认的资源目录,IDEA会自动将该目录下所有文件拷贝到类路径下,后续新增配置都放在此处即可。 - 方案二:如果你确实需要将配置文件放在
src/main/java目录下,可以在pom.xml中添加资源扫描规则,指定将java目录下的xml文件纳入编译拷贝范围,配置示例如下:
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <!-- 保留原有resources目录的扫描规则 --> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>
添加该配置后,IDEA构建时会自动把java目录下的xml文件拷贝到类路径,新增配置也不会出现找不到的问题。
内容的提问来源于stack exchange,提问作者Murat Can Kurt
相关产品推荐
相关产品推荐

