IDEA中遇到一个令人抓狂的关于依赖库的问题

IDEA中遇到一个令人抓狂的关于依赖库的问题


信息
失效 在学习并使用 Maven 对项目进行依赖管理以后,本文已失效(保留以供参考),请看

这两天在学写 JavaWeb ,遇到一个非常令人抓狂的问题

先贴一下项目的目录:

20210625-0.png
令人抓狂的问题(1.项目目录)


就是项目写一半,突然发现数据库连不上了。

20210625-1.png
令人抓狂的问题(2.JDBC驱动报错)

排除了数据库侧和通讯过程的问题,确定问题在项目侧。前面连的很正常,后面突然说连不上,真是百思不得其解。这 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 文件存在差异,其中唯一的差别也只是包名那一行

20210625-2.png
令人抓狂的问题(3.对比两个 jar 包)
20210625-3.png
令人抓狂的问题(4.对比两个 INDEX.LIST 文件)

暂且将问题归为这个包引起的,继续写代码。(重点:当时为了复现问题,把 lib 文件夹挪回原来的目录了。)


这次项目顺利写完了😎,正在补注释。补完前端目录,怕不小心动到哪个地方,测试一下,又双报错了😱

20210625-4.png
令人抓狂的问题(5.json 依赖报错)

这次报的是一个 json 依赖库。赶紧把刚刚动过的几个文件都检查一遍,没问题啊,而且这是后端报的错,后端我还没动啊。我这小项目,总共就引了这么两个依赖,轮着给我报错,这是闹哪样?😵

这真的不是玩我?😭

又是一番 Google ……

一番 Google ……

Google ……

一番操作,无果。

其中有一步在 pom.xml 文件中添加 <dependencies></dependencies> 依赖,其实是有效操作,但只是必要条件,没有构成充分必要条件。

然后我试着把这两个报错的过滤器删掉,测试一下。

咦,又出现数据库报错!(这里不插图了)

这个问题,居然,其实,并没有解决?😱

这么说来,两个问题有关联?甚至可能是同一个问题?

嗯,有进展。😑

那么,就把 lib 文件夹挪到 WEB-INF 下面,rebuild 一下(被这么折腾两次,学精了),数据库连接正常了😂

再把刚才删掉的两个过滤器恢复,rebuild 一下,json 依赖的报错也没了。松一口气😌

然后就是顺利地复现了问题。


  • 对于 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

    • 是个好 IDE ,生产力工具,已加入 本X 的正版采购列表了
    • 存在一些Bug2,提醒大家注意,比如:
      • 做JavaWeb项目的时候,一定要注意缓存问题1
      • 还遇到过不明原因的缓存问题,在资源管理器里已经删掉的文件夹,在 IDEA 新建/打开项目的时候,还能看到,刷新无效,重启 IDEA 无效,过一会再试就好了。


  1. 在 IDEA 下调试 JavaWeb 项目,每次修改后,最好 rebuild 一下,或者直接删除 target 文件夹最彻底。 ↩︎ ↩︎

  2. 可能是软件比较大;也可能是我这个是 2021.1,没升到最新;也可能是我电脑上还有一个 2019.3.3,两个版本共存;也有用得不熟练的原因。 ↩︎

相关内容