maven项目运行错误:找不到或无法加载到xxx类、亦或者xml(yml、properties)等等文件

  • Post author:
  • Post category:其他

复习:idea中几个常见的maven命令与target文件的关系
在这里插入图片描述

maven项目的几个指令
mvn clean :清理maven工程,执行该命令会将target中的文件清空
mvn compile :执行该命令会将target中的文件重新编译
mvn install :执行该命令会在target文件中生成
mvn package:执行该指令会将maven项目打包

理论:在idea中运行springBoot项目时,首先会执行构建工作,构建的结果是在target文件夹下生成一系列编译后的源码
在这里插入图片描述
理论知识点介绍完了,下面开始介绍实战——找不到或无法加载到类xxx、亦或者xml(yml、properties)等等文件的场景
错误情景:找不到或无法加载到xxx类,经过分析发现在target文件夹下没有生成对应的类文件
在这里插入图片描述
解决方案:依次点击图中1、2、3、4步骤,即可在target文件夹下生成编译后的文件
在这里插入图片描述
解决完找不到或无法加载到xxx类后,继续运行项目发现找不到或无法加载到xml(yml、properties)等等文件,经过理论分析发现在生成的target目录里
不存在resources相关文件的问题。

经过归纳总结具体原因有三条:
(1)检查moduls配置有没有将resource目录当成Resources
moduls配置没有将resource目录当成Resources,需要手动配置,配置过程
Project Structure—-Modules—-选中对应文件夹—-选中source—-Apply
在这里插入图片描述
如果配置成功了,查看imi文件,会增加一行
在这里插入图片描述
(2)在配置文件有没有配置resource标签

<build>
    <!-- 项目打包时会将java目录中的*.xml文件也进行打包 -->
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <!--true和false好像都行!,不加filtering也行,某些老师说要为false,不进行过滤-->
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.yml</include>
                <include>**/*.yaml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>  </build>

(3)查看pom.xml文件里,当前项在打包时是否是打成jar包

pom 文件存在 <packaging>pom</packaging>,需要修改为 <packaging>jar</packaging>问题解决

思考

为什么子级文件会出现pom,第一次建错文件,在子级moudel下新建,如果在子集文件新建会自动生成<packaging>pom</packaging>
packaging
pom 不会对文件进行编译,自然也就不会加载resources相关文件
jar 将resources相关文件加载到target下
packaging默认属性是jar,所以正常情况下不会出现问题

总结:

无论是在idea中、还是在eclipse中,无论是一个maven项目,还是一个普通的web项目。当我们启动程序时,编译器都会对java类以及xml(yml、properties)等等文件进行编译,最终编译的结果都会存储到一个相应的文件夹里,jvm最终运行的也是编译器编译后的.class文件(而非.java文件)。所以当我们遇到项目运行错误:找不到或无法加载到xxx类、亦或者xml(yml、properties)等等文件的问题时,首先就去构建后项目编译文件存储的文件夹下寻找是否存在相应的文件,如果不存在则证明我们的代码在编译构建过程中存在问题,此时我们专注于这里解决编译构建时文件丢失的问题。


版权声明:本文为CNCDXX_88原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。