更新Java文件时是否需要调整src/main/resources下的.class文件?
问题解决方案
- 第一时间删除
src/main/resources目录下的abc.class文件,之后正常执行Maven编译命令即可,不需要保留这个文件,理由如下:- Maven标准目录规范中,
src/main/java用于存放Java源代码,执行mvn compile命令时,Maven会自动将该目录下的.java文件编译为.class文件,输出到target/classes目录下,最终打包时也会将这些编译好的类文件打到发布包的正确路径。 src/main/resources是专门用于存放配置文件、静态资源等非Java源代码的目录,不应该存放编译后的类文件,这里的abc.class属于错误冗余文件:- 保留该文件的话,Maven打包时会自动将
resources下的所有文件拷贝到target/classes目录,要么覆盖你新编译的同名类,要么导致运行时类加载器优先读取到旧版本的类,出现代码修改不生效的诡异问题。 - 你修改
abc.java后重新编译,只会更新target/classes下对应路径的类文件,不会改动resources下的旧文件,留着没有任何作用只会带来隐患。
- 保留该文件的话,Maven打包时会自动将
- Maven标准目录规范中,
- 后续优化建议:
- 排查项目
pom.xml中是否有错误的自定义编译/拷贝规则,确认之前为什么会将类文件生成到resources目录,避免后续再出现同类问题。 - 每次修改代码后建议执行
mvn clean compile命令,clean参数会清空之前的target目录,避免旧的编译残留干扰运行结果。
- 排查项目
内容的提问来源于stack exchange,提问作者Karthik G Sarode
相关产品推荐
相关产品推荐

