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 ```
  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/jpfss/p/8301503.html
Copyright © 2011-2022 走看看