idea工具(1):依赖包详解

1、如何导包

idea 中导包,分为两种,pom 文件导包和手动导包,这里说一下如何 pom 文件导包。

1.1 Maven 仓库

首先,百度 maven,找到对应的仓库(repository)官方网站:

在这里插入图片描述

在这里插入图片描述

输入包名,点进去,就可以看到:

在这里插入图片描述

选好版本:

在这里插入图片描述

复制粘贴就可以。

1.2 百度包名

直接百度包名,一般也会有热心网友给出帖子,这个时候就需要更改一下版本了。

1.3 手动导包

File——Project Structure,或者快捷键:Ctrl+shift+Alt+S

在这里插入图片描述

2、导入的包在本地哪里?

打开 file——settings,找到 maven:

在这里插入图片描述

如上图所示,可以看到 maven 的本地仓库(这个是默认仓库),当然可以自己更换位置(建议不要修改,因为之前项目拉取的各种依赖包都在这里,换了位置下一个项目加入依赖还要重新下载):

在这里插入图片描述

上面 repository 就是仓库的意思,这个是 maven 的本地仓库,对应的每个 idea 项目中也有一个包库,其中引用的就是 maven 仓库里面的包。

那么如何找包呢?比如找下面的包:

在这里插入图片描述

首先,找到 maven 仓库位置,然后找到 io 文件夹,再找 netty:

在这里插入图片描述

3、pom 文件与 idea 界面中左右两侧的依赖包

在这里插入图片描述

在 idea 中,可以看到,左右两侧都有 dependency,其中左侧表示的是项目所用到的去重后的所有依赖包。

为什么要去重呢,因为每个 dependency 往往需要依赖其他的包,如果添加的依赖比较多,那么依赖包 A 需要大量的其他依赖包,这就会导致很多依赖包重复依赖。

与 pom 文件息息相关的是右侧的 dependencies,每当 pom 文件导入一个依赖包,右侧的 dependencies 就会增加一个,如下图所示:

在这里插入图片描述

蓝色框的依赖包和红色框的依赖包导入语句是一样的,只不过 breeze-macros 是需要依赖包的,将其展开就是其所需要的依赖包,所以很多时候你会发现,pom 文件中导入的依赖包很少,但是仓库中确有很多依赖包,这是因为一个依赖包需要很多其他依赖包才能执行。就好像你要阅读一篇英文金融论文,你需要的技能可能会包括:英文、阅读理解、金融基础等等,这些技能就是阅读该论文所需要的依赖。

打开本地 maven 仓库中其中一个包,里面有一个文件就记录了其依赖包:

在这里插入图片描述

添加一个依赖的,基本流程是:

  1. 首先,在 pom 文件中写入:
    <dependency>
        <groupId>org.scalanlp</groupId>
        <artifactId>breeze-macros_2.11</artifactId>
        <version>0.13</version>
    </dependency>
  1. 扫描本地 maven 仓库看看存不存在该依赖包,如果存在则复制到 idea 中 ,(这里写错了,idea项目目录下本身是不存在依赖包的,所有依赖包都存在与本地maven仓库中),如果不存在,则进行下一步
  2. 联网,maven 工具从中央仓库(也就是 maven 服务器中,这个服务器可以进行设置,一般是选择国内阿里镜像,下载比较快,这里服务器设置在.m2/setting.xml 中)下载 breeze-macros_2.11 包,同时会下载相关的依赖包,在左侧显示出来:

在这里插入图片描述

在上图中,将 breeze-macros_2.11 展开后,其下部分便是其所需依赖包,其中暗淡蓝色框部分是与项目中的依赖包重复部分,可以看到每行后面括号里说明了原因,与什么什么包相矛盾或者是出现了两个。

  1. 依赖包下载完成,去重之后,导入项目中,这时就会出现在项目的左侧:

在这里插入图片描述

可以看到,这时候,其展开后展示的是该依赖包的源代码,而不再是其所需的其他依赖包,因为其他依赖包是和它在同一级目录中。

承接上面第一步,idea中到底存不存在依赖包:

之前,以为本地的maven仓库是一个公共的依赖库,无论你的idea项目是否存在都不会影响它,所有给我一个错觉——idea项目和本地maven仓库关系不大,当导入依赖的时候,idea会从本地仓库复制依赖包到项目中,但是事实上这是错误的,因为本地的maven仓库就是idea项目的一部分,只是可能多个idea项目会同时用的这个仓库才会给我这种错觉,我之前的想法是maven仓库在idea项目之外,那么idea每次运行都要调用maven仓库的jar包多麻烦啊,为什么不直接复制到idea目录下,现在想想自己走入了一个误区,对于计算机来说无论是maven仓库还是idea目录下调用起来都是一样的,其路径只是一个字符串罢了,不存在距离远近。

4、报错:程序包找不到怎么办?

新拿来一个项目通常就会遇到这样的问题,依赖包不存在,其解决步骤,我总结分为如下几步,一步步来,肯定可以解决。

4.1 第一步:更新依赖包

一般情况下,打开 maven,然后点击 clean(删除之前编译过的文件),然后直接点击 Maven 中的更新依赖包即可:

在这里插入图片描述

当然,如果不想手动更新,可以设置自动更新,file-Setting:

在这里插入图片描述

选择 import maven projects automalically(本质是默认自动更新),应用之后,只要我们更改了 pom 文件,就会自动更新依赖包,并且不会再出现导入提示框:

在这里插入图片描述

个人建议还是不要选择这个,因为有时候改动 pom 文件的时候,还没有改完就开始自动更新了,一点也不智能,还是人为控制比较好。

4.2 第二步:始终更新快照

不过,有时候有时 reimport 也解决不了问题,出现大量红色下划线,还有报错:

Cannot resolve nz.ac.waikato.cms.weka:weka-stable:3.8.5

这时候要用另外一种方法:file——setting:

在这里插入图片描述

这里说一下,Always update snapshots 是始终更新快照的意思。

什么是快照?

maven 仓库一般分为两个仓库:public(Release)仓库和 SNAPSHOT 仓,前者存放正式版本,后者存放快照版本。快照版本会不断更新迭代(新功能会有 bug,不断更改),迭代多次之后稳定了,就会形成一个新的正式版本。

选择 Always update snapshots 与不选的区别?

个人认为,如果不勾选 Always update snapshots,那么在 maven 服务器上拉取依赖包的时候,都是自动默认拉取正式版本的依赖包;但是如果勾选了,则会去查看依赖包的对应快照版本,并且会定期去看快照版本有没有进更新。

为什么勾选了 Always update snapshots 能够一定程度解决 reimport 解决不了的问题?

原因可能有两个,一个是当前稳定版本存在 bug,而下载快照后可以解决(概率较小);较大的概率是因为 reimport 时,因为网速原因下载了一部分就停止了,而 maven 扫描到本地仓库存在该依赖包(残缺),就不会下载,这时候突然下载快照版本,替换了原来的残缺版本,所以就可以了。

要不要勾选 Always update snapshots

个人认为,如果只是单纯为了解决依赖包问题,可以先勾选,解决完了就不勾选;因为快照版本是可能存在一定 bug 的,它不断进行更新,万一这一版本的依赖包存在问题,你的程序就可能崩了;而且不断更新会浪费一定的时间和带宽。

4.3 第三步:删除依赖包,重新下载

还有的时候,是下载依赖没有下载完全,但是你 reimport 的时候,程序发现已经存在(不会断点重传),这个时候需要到 C:\Users\当前用户名.m2\repository 库中去删除那个包,然后重新下载,这个会解决一部分问题。

4.4 第四步:导入成功了,但是依然报错找不到包

如果导入成功了,但是报错找不到包如下:

在这里插入图片描述

这时候点击项目右键,找到:open module setting:

在这里插入图片描述

如上图,根据箭头,找到所在项目的所在包,可发行其 Scope(也就是这个包可执行范围)是 Test,也就是说这个包只有在进行测试的时候,才会发挥作用;而我们现在要在运行的时候也要让其发挥作用,则要将 Test 改为 Compile(编译)。

OK,今天就到这里,更多精彩内容关注我的个人网站:蓝亚之舟博客

  • 13
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值