您现在的位置是:首页 >学无止境 >关于一个由于我愚蠢的操作造成了一个我找了一天的bug网站首页学无止境
关于一个由于我愚蠢的操作造成了一个我找了一天的bug
背景是我在写一个小的servlet项目,没有使用maven,手动添加各种依赖的jar包到lib里,之后我又手动添加删除了一些jar包,其中一个是关于Druid的jar包,后来在测试一个功能的时候发现一直报找不到Druid类,但是我用junit的单元测试@Test测试了dao层对应的方法,成功得到了正确的数据,所以我就认为Druid没出错,而是一些其他错误导致了IDEA认为是访问Druid的错误。
后来在我搞了一天后,我意识到代码没问题,就是依赖处了问题,然后我重新建了这个项目,复制了之前的代码,重新导入了依赖,这次我没有再改动lib目录内的jar包,然后项目就成功运行了。
请教AI后补充了以下我之前没有了解的知识:
总结:
-
手动管理依赖的风险:
-
手动添加和删除 JAR 包容易导致类路径(Classpath)不一致或缺失,尤其是在没有构建工具(如 Maven 或 Gradle)的情况下。
-
手动管理依赖时,IDE(如 IDEA)可能无法正确同步类路径,导致运行时找不到相关的类。
-
-
JUnit 测试与 Servlet 环境的差异:
-
JUnit 测试运行在独立的测试环境中,通常不依赖于外部容器(如 Tomcat)。测试环境可能会使用默认的数据库连接方式(如 HikariCP 或内存数据库),而不会受到生产环境配置的影响。
-
Servlet 容器环境依赖于外部配置(如
web.xml
、application.properties
等),如果配置有问题(如 JAR 包缺失或配置错误),会导致运行时错误。
-
-
IDEA 的类路径管理:
-
IDEA 会在项目根目录下生成
.idea
目录和*.iml
文件,这些文件记录了项目的模块配置和依赖路径。 -
手动修改依赖后,IDEA 的配置文件可能没有正确更新,导致类路径不一致。重新创建项目后,IDEA 重新生成了配置文件,问题得以解决。
-
-
依赖冲突与版本问题:
-
手动添加 JAR 包时,可能会引入依赖冲突或版本不一致的问题。例如,Druid 的某个版本可能与其他依赖(如数据库驱动)不兼容。
-
重新创建项目后,依赖冲突可能被解决,因此项目可以正常运行。
-
-
可以尝试删除
.idea
目录和*.iml
文件,然后重新导入项目。(我没试)