IDEA 非常重要的一些设置项 → 一连串的问题差点让我重新用回 Eclipse !

开心一刻

  建筑行业内,我看过的最凶残笑话(IT行业内好一致!)

  上联:一天晚上两个甲方三更半夜四处催图只好周五加班到周六早上七点画好八点传完九点上床睡觉十分痛苦

  下联:十点才过九分甲方八个短信七个电话居然要六处调整加五张图纸四小时交三个文本两天周末只睡一个小时

  横批:用原来的

内心的独白

写作背景

  2017 从 eclipse 换到 IDEA,适应了一段时间,后面一直用 IDEA 2018 版,使用期间偶尔出现一些小问题,但不多,没太注意

  最近换了电脑,开发环境得重新搭,顺便把 IDEA 更新下。本来打算用 2020 版的,可网上对 2020 版的评论一致比较差,所以我就放弃做勇士了,用的是 2019.3.5 版本

  切了版本后,使用期间陆陆续续暴露了不少问题,有些问题还花了不少时间来处理,期间甚至有了放弃 IDEA,重新投抱 Eclipse 的想法,但是后面冷静一想,Eclipse 几年没用,都忘完了,重新捡起来的成本可能更高,所以痛定思痛,决定将 IDEA 的这些比较常用的设置全部整理一下,方便以后自己查阅,也方便遇到同样问题的小伙伴进行问题排查与处理

  需要大家注意是,楼主用的是 IDEA 2019.3.5 版本,可能和大家的版本不同,版本不同,配置项会有细微的区别,大家不要完全一致的去对比

全局设置与当前设置

  其实 IDEA 安装完成的时候就提示我们进行全局设置,但是往往被我们忽略了

  当我们打开工程后,往往设置的是当前工程的设置,而不是全局设置,所以当我们用新窗口打开新的工程时,发现新窗口的设置都是默认的,而不是我们之前设置的,这就有点不爽了

  那如果我们在 IDEA 安装的时候没有进行全局设置,还能进行全局设置吗? 答案是肯定的,可以在 IDEA 窗口进行当前设置和全局设置,如下图

  

  Settings 表示的是当前设置,Other Settings 表示的是全局设置;不同的 IDEA 版本,Other Settings 代表的都是全局设置(未来不一定,但是历史是这样),只是 Other Settings 下内容可能会有所不同

  如果既进行了 Settings 设置,又设置了 Other Setting, 那么当前工程生效的是 Settings 中的设置

  后续讲到的一些设置若非特殊说明都是在全局设置下进行,主要是为了强调下全局设置的重要性(可能只是楼主后知后觉,汗...)

必定修改

  Project SDK

    配置成我们安装的 JDK,目前用的比较多的是 1.8 版本; 配置如下

    

  项目文件编码

    工程编码我需要统一,基本统一成 UTF-8,设置如下

    

    都选择 UTF-8

    如果不选择 UTF-8,可能会编译不报错,但是启动时却报错:Error:(15,31) java: 找不到符号

  自动编译

    默认情况下,自动编译是关闭的,我们可以按下图进行开启

    

     将复选框勾上则开启自动编译,但后面有说明:非 running 或 debugging 时才生效

  智能导包

    效果就是,当我们输入 List,能够自动导入 java.util.List ,设置如下

    

    两个复选框都需要勾上

  行号显示

    显示代码行号,配合日志能快速地定位到出问题的代码,设置如下(这个只能在 Settings 中进行设置)

    

    需要将复选框勾上;勾选上之后,每一行代码前就会有行号显示,如下所示

    

  制表符设置

    主要时考虑到不同的编辑器对 Tab 的处理不同,所以统一成 4 个空格来处理

    

     复选框不要勾

  maven 设置

    IDEA 自带 maven,路径: ${idea_home}\plugins\maven\lib ,比如楼主 IDEA 自带的 maven 路径: D:\soft\JetBrains\IntelliJ IDEA 2019.3.5\plugins\maven\lib 

    自带两个版本

    如果我们用自带的 maven,那么我们可以修改这两个 maven 的配置文件,完成对 maven 的自定义配置(比如修改本地仓库路径、添加远程 maven 镜像等)

    但很多时候我们不用 IDEA 自带的 maven,往往会选择独立的 maven

    配置如下

    

    标记的地方替换成我们自己的 maven, 至于 Local repository,会自动加载 maven settings.xml 中的仓库地址,一般不用覆盖修改

    如果不用 IDEA 自带的 maven,需要注意 IDEA 与 maven 的版本关系,存在兼容关系

    IDEA2019、2018、2017版本,推荐用 maven 3.5 或更低版本;IDEA 2019 之后的版本,推荐使用 maven 3.6 及以上版本

    最终推荐:用 IDEA 自带的 maven,我们对其进行自定义配置即可(不存在兼容问题)

  构建/运行操作不委托给 maven

    默认情况下对项目的构建和运行是 IDEA 自己负责的,这样就可能导致构建和运行时无法找到 maven 仓库中的相关 jar 包,从而出现:Error:(6, 34) java: 程序包xxx不存在的错误

    进行如下配置,将构建/运行操作委托给 maven,这样依赖的 jar 包都能正确找到

    

    复选框勾上后,构建和运行操作就委托了 maven

    但是这样设置后运行单个 main 方法都会输出一堆的 maven 日志,而这个时候我们往往只想关注 main,而不想关注 maven

    所以,Delegate IDE build/run actions to Maven 前的复选框不要勾上,然后指定 idea 中的本地 maven 仓库

    

    这样设置后,既不会报包找不到的错误,也不会将构建和运行操作委托给 maven

推荐修改

  多行显示文件 Tab

    默认情况下多行 Tab 是单行显示的,效果如下

    

    所有打开的文件 Tab 显示在一行,显示不下的收缩起来(越久未被操作的文件越容易被收缩);文件多了收缩起来,还是不太方便文件的切换操作,推荐多行显示,配置如下(只能在 Settings 下设置)

    

    复选框不要勾上,设置了后效果如下

    

    这样文件切换起来更方便

  取消 import xxx.*

    当我们 Java 类中导入的某个包下类超过指定个数,就会换成用 * 号来代替,例如:import java.utils.*;

    * 代表的是导入包下所有类,不够直观,也没必要,需要什么就导入什么是最好的

    

    Class count to use import with '*' 表示的是:导入了同个包下多少的类,就将这些导入替换成 *, 默认是 5

    Names count to use static import with '*' 则表示的是:静态导入了同个类中多少的静态常量,就将这些导入替换成 *, 默认是 3

    我们将这两个值配置大一些,那么就不会 import * 了

  类注释模板

    阿里规约中有这么一条,类必须加注释,并且必须要有 author

    类注释还是很有必要的,可以追溯到人,便于业务的沟通

    配置如下

    

    想加什么参数就加什么;设置好后,我们新建一个类,就会自动带上注释,如下所示

    

  快速文档显示

    默认情况下,IDEA 是不显示快速文档的,我们把鼠标放到方法调用(或接口实现)上,是不能提示接口中的注释文档的,如下所示

    

    每次看方法的说明,还得去对应的接口中去看,有点麻烦;但 IDEA 是提供了对应的配置项来开启快速文档显示的(只能在 Settings 中进行设置,但是全局生效)

    

    将标记的复选框勾上,保存即可;之后效果如下

    

    不只是针对方法的快速文档,还支持类、属性的快速文档

  文件夹层级显示

    先捋清下名称的问题,免得大家理解上出现分歧

    

    可以看到,在 java 下创建的是 Package ,在其他下创建的是 Directory ,反映到操作系统的文件系统上,都叫文件夹,所以我们接下来我们都以文件夹来说事

    默认情况下,IDEA 是将空文件夹(文件夹下只有一个文件夹,没有文件)折叠显示的,如下所示

    

    这样层级结构不深,看起来确实简单直白一些,但这样往往会迷惑我们,导致关于配置文件路径的问题不好排查,楼主就在这上面栽了跟头,配置 mybatis 后出现了 Invalid bound statement (not found) ,却排查了很久

    IDEA 中是可以一次创建多级文件夹的(真的吗?),如下所示

    

    看着似乎很正常,我们关闭文件夹折叠显示,让文件夹显示完整的层级结构

    

    发现什么了没,还不直观? 我们去磁盘上看

    

    可以看到, resources 下的 emall.dao 是一个文件夹的名字,而不是 emall 是一个文件夹,并且它下面有个子文件夹 dao ,所以导致楼主配置的 mybatis 映射文件 com/lee/emall/dao/*.xml 就找不到了,也就出现了错误 Invalid bound statement (not found) 

    总结下, java 文件夹下支持一次性创建多级 Packages ,其他文件夹下不支持一次性创建多级 Directory ;文件夹的折叠显示最好关闭,万一不小心犯了与楼主一样的错,方便排查

  关闭 Debug 模式下 IDEA 的自动调用

  默认情况下,这两个配置是开启的,如下图

  

  表示 IDEA 在 Debug 模式下会主动帮我们调用一次 toString 方法,虽然很多情况下调一次 toString 并没什么影响,

  但有些场景是会受影响的,比如 ConcurrentLinkedQueue ,它的 toString 方法继承自 AbstractCollection ,代码如下

  

  这里会调用 iterator() ,我们看下 ConcurrentLinkedQueue 的 iterator() 

  

  后续大家自行去跟;这就会导致我们 Debug 的时候,出现一些让我们感觉到莫名其妙的问题

  所以我们需要关闭这两个配置,如下所示

  

  详见:why-my-object-has-been-changed-by-intellij-ideas-debugger-soundlessly

可能修改

  maven Ignored files

    Settings 下有这么个设置

    

    理论上来讲,这个列表中的复选框都不能勾选(默认也都不会勾选),如果勾选了,那么就被勾选了的 pom.xml 对应的工程就不会被当作 maven 工程,后果可想而知:不是 maven 工程就会有依赖找不到的问题,项目就会启动失败

    楼主不知道怎么回事就勾上了其中一个,出现如下症状

    

    maven 工具窗口下该 maven 工程显示成了灰色,特别与众不同;然后启动该工程的时候,提示各种依赖都找不到,真是毙了狗

  Method Breakpoints

    正常情况来说,我们是不会直接在方法名上打断点的,断点往往是打在方法体上的某一行上,但是楼主不知道怎么回事就打了,导致以 debug 方式启动不了工程,并提示:Method breakpoints may dramatically slow down debugging

    打开 Breakpoints 面板看看(快捷键:Ctrl+Shift+F8 )

    

    一个断点打在了 UserService 接口中的方法上,一个接口打在了实现类 UserServiceImpl 的方法名上

    一般而言不会出现这种情况,就怕大家像楼主一样不小心,在方法名上打了断点,并导致项目 debug 不起来,知道如何处理就好

    逐个选中,remove 就好,如下图所示

    

总结

  1、遇到问题,不能立马想到去怎么处理的,尽快利用网络去查,千万不要一头扎进自我认为中去,太费时了,最后还得求助于网络

    网络搜索的话,关键字非常重要,描述的越清楚,命中率越高;如果确实不好描述,那就多换关键字去查

  2、有些配置是需要勾选复选框,有些是不能勾选,大家要看清楚了

  3、文中的 IDEA 配置修改分了三种:必须、推荐、可能,只囊括了一部分,有些未考虑到的欢迎大家补充

    可能级别中的问题基本都是误操作,大家留个印象就好,万一碰到了知道怎么处理

  4、要学会多总结,包括各个方面的总结,这样我们才能越来越强大!

posted @ 2020-08-11 09:13  青石路  阅读(3142)  评论(3编辑  收藏  举报