zoukankan      html  css  js  c++  java
  • 解决 IDEA 中src下xml等资源文件无法读取的问题

    该问题的实质是,idea对classpath的规定。

    在eclipse中,把资源文件放在src文件夹下,是可以找到的;

    但是在idea中,直接把资源文件放在src文件夹下,如果不进行设置,是不能被找到的。


    下面说说几种解决方法,网上说的都很混乱,我这里做一个总结:推荐方法4


    1.将所有资源文件放在resources文件夹下

    这样做很方便,比较容易想到,但是层次性就很差了,比如mybatis的映射配置文件mapper.xml,本来需要放在特定的包里面,与dao层,service层等层次为同一个层级,如今只能放在resource文件夹下,不方便分层;


    2.如果该项目是maven项目:

    配置maven的pom文件配置,在pom文件中找到<build>节点,添加下列代码:

    1. <build>  
    2.     <resources>  
    3.         <resource>  
    4.             <directory>src/main/java</directory>  
    5.             <includes>  
    6.                 <include>**/*.xml</include>  
    7.             </includes>  
    8.         </resource>  
    9.     </resources>  
    10. </build>  
    我尝试过将directory修改为具体的放置配置文件的包,即修改成 src/main/java/lj/ncepu/mapperXML,然后<include>标签里面也做了很多修改和尝试,始终无法访问到配置文件;

    所以,直接使用上面这样的配置就好;如果还是不能访问,欢迎跟帖讨论;如果你知道应该怎么样修改,也请跟帖讨论,谢谢~

    参考:将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹


    3.将包含配置文件的包,mark directory as ... Resources:

    直接右键点击包 -> Mark Directory As ,你会发现只有一个exclude;怎么办?

    Project Structure -> Modules -> Sources -> 选择包含配置文件的package -> Mark as -> 选择第三个 Resources -> OK

    参考:http://stackoverflow.com/questions/6104551/java-setting-classpath


    4.将package添加到classpath里:

    Project Struture -> Modules -> Dependencies -> "+" -> JARS or directories -> 选择包 

    -> 弹出Choose Categories of Selected Files -> 选择Classes -> OK

    参考:http://stackoverflow.com/questions/854264/how-to-add-directory-to-classpath-in-an-application-run-profile-in-intellij-idea


    以上几种方法是在IDEA开发环境中可以找到资源文件,但是具体打包发布是否会包含该资源文件还需具体测试。

    我的测试结果是,4种方法均可以在发布时包含package中的xml文件。



    2018-01-17更新


    这个问题出现的场景是自己用Springboot整合Mybatis的时候报错“Invalid bound statement (not found)”意思很明显找不着“XXXMapper.xml”文件,本次整合过程中都是用的IDEA开发工具,最后排查到最后发现是自己将MyBatis的Mapper文件地址配置成了“mapperScanPackage: com.XXX.module.app.mapper”在src的包中,这个在Eclipse中是可以的,最后排查发现发布目录的target-->classes目录中没有改xml文件,后来查询到IDEA中发布过滤了XML文件造成的,用上面的第二种方法解决好了,我其实不愿意将“XXXMapper.xml”文件放到resources目录下,在此Mark下! 再次补充这个问题,按照上面方法二弄了以后就无法识别resources目录下的配置文件了,这个时候的解决方案是在“build”再次包含一个“resources”标签,具体设置代码如下(亲测可行):
    ```xml src/main/java **/*.xml src/main/resources **/*.xml ```
  • 相关阅读:
    团队作业(三)
    第四章学习笔记
    2.3.1测试
    缓冲区溢出漏洞实验
    第三章学习笔记
    团队作业(二)
    第十一章学习笔记
    第7,8章自学笔记
    stat命令实现—mystat
    第五章学习笔记
  • 原文地址:https://www.cnblogs.com/jpfss/p/8301503.html
Copyright © 2011-2022 走看看