IDEA中遇到一个令人抓狂的关于依赖库的问题
IDEA中遇到一个令人抓狂的关于依赖库的问题
0.1 背景
这两天在学写 JavaWeb ,遇到一个非常令人抓狂的问题
先贴一下项目的目录:
0.2 问题第一次出现:
就是项目写一半,突然发现数据库连不上了。
排除了数据库侧和通讯过程的问题,确定问题在项目侧。前面连的很正常,后面突然说连不上,真是百思不得其解。这 IDEA 不是开玩笑吗,现在跟我说找不到驱动,那前面你拿什么连的?😕
Google 了半天,问了人,都没能解决问题,最后在某个网页看到一个同学的项目目录结构,是将 lib 文件夹(就是放 jar 文件的依赖库)放在 WEB-INF 下面的,想起来老师讲课的时候也是放这里面,就挪过去试试。
咦,好了!😆
虽然埋了两三个小时进去,但解决了问题,是非常值得高兴的。赶紧发到学习群里分享一下。
发完觉得有点不够严谨,试试复现一下问题:把 lib 挪回原来的目录,问题 没!有!复!现!……😱😵
那究竟是什么问题呢?😕
既然不是这步操作解决了问题,那是不是前面的哪步操作其实是有效的,只是因为IDEA的缓存机制导致当时没有立即生效呢1?回想起来只有一步更换 jar 文件的操作最有可能,当时把 mysql-connector-java-5.1.49-bin.jar
换成了 mysql-connector-java-5.1.49.jar
。
事后对比过这两个包,实际上只有一个 INDEX.LIST 文件存在差异,其中唯一的差别也只是包名那一行
暂且将问题归为这个包引起的,继续写代码。(重点:当时为了复现问题,把 lib 文件夹挪回原来的目录了。)
0.3 问题第二次出现:
这次项目顺利写完了😎,正在补注释。补完前端目录,怕不小心动到哪个地方,测试一下,又双报错了😱
这次报的是一个 json 依赖库。赶紧把刚刚动过的几个文件都检查一遍,没问题啊,而且这是后端报的错,后端我还没动啊。我这小项目,总共就引了这么两个依赖,轮着给我报错,这是闹哪样?😵
这真的不是玩我?😭
又是一番 Google ……
一番 Google ……
Google ……
一番操作,无果。
其中有一步在 pom.xml 文件中添加 <dependencies></dependencies>
依赖,其实是有效操作,但只是必要条件,没有构成充分必要条件。
然后我试着把这两个报错的过滤器删掉,测试一下。
咦,又出现数据库报错!(这里不插图了)
这个问题,居然,其实,并没有解决?😱
这么说来,两个问题有关联?甚至可能是同一个问题?
嗯,有进展。😑
那么,就把 lib 文件夹挪到 WEB-INF 下面,rebuild 一下(被这么折腾两次,学精了),数据库连接正常了😂
再把刚才删掉的两个过滤器恢复,rebuild 一下,json 依赖的报错也没了。松一口气😌
然后就是顺利地复现了问题。
0.4 总结
-
对于 jackson 的3个依赖包
-
必须放在
main/webapp/WEB-INF/lib
下面 -
必须在 pom.xml 文件中添加
<dependencies></dependencies>
依赖:-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.12.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.12.3</version> </dependency>
-
-
试过放在
main/java/lib
下面,此时添加依赖,jackson-databind 的版本号红字
-
-
对于 mysql-connector-java-5.1.49.jar 这个包
- 只要放在
main/webapp/WEB-INF/lib
下面就可以,pom.xml 文件中不添加依赖,也没出现问题
- 只要放在
-
(这二者的差别也是挺迷惑的)😕
-
以后完全用 maven 来管理依赖,应该不会有这类问题了。
-
关于 IDEA