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 仓库中其中一个包,里面有一个文件就记录了其依赖包:
添加一个依赖的,基本流程是:
- 首先,在 pom 文件中写入:
1 2 3 4 5 |
<dependency> <groupId>org.scalanlp</groupId> <artifactId>breeze-macros_2.11</artifactId> <version>0.13</version> </dependency> |
- 扫描本地 maven 仓库看看存不存在该依赖包,
如果存在则复制到 idea 中,(这里写错了,idea项目目录下本身是不存在依赖包的,也就没有复制一说,具体看下面有详细解释),如果不存在,则进行下一步 - 联网,maven 工具从中央仓库(也就是 maven 服务器中,这个服务器可以进行设置,一般是选择国内阿里镜像,下载比较快,这里服务器设置在.m2/setting.xml 中)下载 breeze-macros_2.11 包,同时会下载相关的依赖包,在左侧显示出来:
在上图中,将 breeze-macros_2.11 展开后,其下部分便是其所需依赖包,其中暗淡蓝色框部分是与项目中的依赖包重复部分,可以看到每行后面括号里说明了原因,与什么什么包相矛盾或者是出现了两个。
- 依赖包下载完成,去重之后,导入项目中,这时就会出现在项目的左侧:
可以看到,这时候,其展开后展示的是该依赖包的源代码,而不再是其所需的其他依赖包,因为其他依赖包是和它在同一级目录中。
承接上面第一步,idea中到底存不存在依赖包?
4、报错:程序包找不到怎么办?
新拿来一个项目通常就会遇到这样的问题,依赖包不存在,其解决步骤,我总结分为如下几步,一步步来,肯定可以解决。
4.1 第一步:更新依赖包
一般情况下,打开 maven,然后点击 clean(删除之前编译过的文件),然后直接点击 Maven 中的更新依赖包即可:
当然,如果不想手动更新,可以设置自动更新,file-Setting:
选择 import maven projects automalically(本质是默认自动更新),应用之后,只要我们更改了 pom 文件,就会自动更新依赖包,并且不会再出现导入提示框:
4.2 第二步:始终更新快照
不过,有时候有时 reimport 也解决不了问题,出现大量红色下划线,还有报错:
这时候要用另外一种方法:file——setting:
这里说一下,Always update snapshots 是始终更新快照的意思。
什么是快照?
选择 Always update snapshots 与不选的区别?
为什么勾选了 Always update snapshots 能够一定程度解决 reimport 解决不了的问题?
要不要勾选 Always update snapshots?
4.3 第三步:删除依赖包,重新下载
还有的时候,是下载依赖没有下载完全,但是你 reimport 的时候,程序发现已经存在(不会断点重传),这个时候需要到 C:\Users\当前用户名.m2\repository 库中去删除那个包,然后重新下载,这个会解决一部分问题。
4.4 第四步:导入成功了,但是依然报错找不到包
如果导入成功了,但是报错找不到包如下:
这时候点击项目右键,找到:open module setting:
如上图,根据箭头,找到所在项目的所在包,可发行其 Scope(也就是这个包可执行范围)是 Test,也就是说这个包只有在进行测试的时候,才会发挥作用;而我们现在要在运行的时候也要让其发挥作用,则要将 Test 改为 Compile(编译)。
来自外部的引用: 1