IDEA之我不得不留的插件,精心整理
俗话说:“工欲善其事,必先利其器”。
Alibaba Java Coding Guidelines
2017年10月14日杭州云栖大会,Java代码规约扫描插件全球首发仪式正式启动,规范正式以插件形式公开走向业界,引领Java语言的规范之路。
Java代码规约扫描插件以今年年初发布的《阿里巴巴Java开发规约》为标准,作为Eclipse、IDEA的插件形式存在,检测JAVA代码中存在不规范得位置然后给予提示。规约插件是采用kotlin语言开发的,感兴趣的同学可以去开看插件源码。
阿里巴巴规约插件包含三个子菜单:编码规约扫描、关闭试试检测功能、切换语言至英文(English)。如果工具栏显示中文乱码,可能是字体不支持中文显示,可以在
Settings—>Appearance&Behavior—>Appearance选择支持中文的支持
阿里巴巴 Java代码规范插件。
安装该插件后,代码超过 80 行、手动创建线程池等,这些和《手册》中的规约不符时,IDEA中会给出警告提示。
建议大家一定一定一定要安装该插件,它会帮助你检查出很多隐患,督促你写更规范的代码。
Grep console
Grep Console是一款和IDEA Console相关的插件
可以通过expression表达式过滤日志、给不同级别的日志或者给不同pattern的日志加上背景颜色与上层颜色。
自用配置颜色
Rainbow Brackets
通过配置颜色,让选中的括号范围 高亮
高亮效果(默认快捷键 mac : command+鼠标右键单击, windows : ctrl+鼠标右键单击):
选中部分外暗淡效果(默认快捷键 alt+鼠标右键单击):
Maven Helper
Maven helper 插件提供了如下特性:
可以方便的找到和排除冲突的依赖项
可以 run/debug 包含当前文件的模块或者根模块
可以 run/debug 当前测试文件。如果 maven-surefire-plugin 配置了skip或者 exclude test,verify 目标则会使用,可以查看不同的配置风格:风格
Maven helper 的用法:
- 方法一
-
右键点击 Editor| Run Maven
-
CTRL + ALT + R快速运行maven goals
-
CTRL + SHIFT + ALT + R快速运行跟模块的maven goals
-
自定义goals:Settings | Other Settings | Maven Helper
-
定义快捷键:Settings | Keymap | Plug-ins | Maven Helper
-
打开 pom.xml 文件, 点击 Dependency Analyzertab
-
方法二
在插件安装好之后,我们打开pom.xml文件,在底部会多出一个Dependency Analyzer选项
点开这个选项
找到冲突,点击右键,然后选择Exclude即可排除冲突版本的Jar包。
MyBatisCodeHelper-Pro
1.根据java实体类生成数据库 (前提Database先连接到数据库)
[建议使用前先观看以下教程]
Generate All setters
[1] 直接在函数体中使用alt+enter快捷键,选择“generate all setter”,自动创建返回值类型相同的对象并调用所有的set方法,并且会根据参数中的实体名填充,如果没有填充默认值。
[2] 在某个实体对象名称中使用快捷键,选择该功能,则会生产该实体的所有set的方法,并赋默认值。
返回对象使用 使用极佳
Codota
智能代码提示
使用快捷键可以搜索知名开源项目中该类或者方法的使用案例,超赞。
Material Theme UI
颜值控的福音
对于很多人而言,写代码时略显枯燥的,如果能够安装自己喜欢的主题将为开发工作带来些许乐趣。
RestfulToolkit
Spring MVC网页开发的时候,我们都是通过requestmapping的方式来定义页面的URL地址的,为了找到这个地址我们一般都是cmd+shift+F的方式进行查找,大家都知道,我们URL的命名一个是类requestmapping+方法requestmapping,查找的时候还是有那么一点不方便的,restfultookit就能很方便的帮忙进行查找。
例如:我要找到/book/add 对应的controller,那么只要ctrl+Alt+N ,如图:
- 根据 URL 直接跳转到对应的方法定义 ( Ctrl \ or Ctrl Alt N );
- 提供了一个 Services tree 的显示窗口;
- 一个简单的 http 请求工具;
- 在请求方法上添加了有用功能: 复制生成 URL;,复制方法参数…
- 其他功能: java 类上添加 Convert to JSON 功能,格式化 json 数据 ( Windows: Ctrl + Enter; Mac: Command + Enter )
全局快捷搜索:Ctrl +\
功能演示
安装后,右侧会有RestServices侧边栏,点击后会显示当前项目所有请求地址,可以进行输入查询,然后会直接把请求方式,地址以及参数列出来,默认请求服务器为本机(localhost:8080),可根据需求更改。
Jrebel
注意: 热部署只是针对class文件,源文件这些。对于属性文件.xml或.properties,只要修改了,都需要重启服务器,因为属性文件是在服务器启动的时候加载的,不可能被热部署识别到。
FindBugs-IDEA
作用:
检测代码中可能的bug及不规范的位置,写完代码后检测下 避免低级bug。
静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷。当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现。
实际应用:
扫描完成后:
附录(网摘):
FindBugs 它用来查找Java代码中存在的bug。它使用静态分析方法标识出Java程序中上百种潜在的不同类型的错误。
FindBugs支持对包级别、项目级别、模块级别、单个文件级别,以及自定义范围的Bug分析。
FindBugs:特色是能够检查出空指针异常这种bug!
使用:右键单击(module、单个文件等)—>在快捷菜单中选择findbugs即可
附:FindBugs的Bug种类说明
Bad practice 坏的实践
一些不好的实践,下面列举几个:
HE:类定义了equals(),却没有hashCode();或类定义了equals(),却使用Object.hashCode();或类定义了hashCode(),却没有equals();或类定义了hashCode(),却使用Object.equals();类继承了equals(),却使用Object.hashCode()。
SQL:Statement 的execute方法调用了非常量的字符串;或Prepared Statement是由一个非常量的字符串产生。
DE:方法终止或不处理异常,一般情况下,异常应该被处理或报告,或被方法抛出。
Malicious code vulnerability 可能受到的恶意攻击
如果代码公开,可能受到恶意攻击的代码,下面列举几个:
FI:一个类的finalize()应该是protected,而不是public的。
MS:属性是可变的数组;属性是可变的Hashtable;属性应该是package protected的。
类名小写问题:
Correctness 一般的正确性问题
可能导致错误的代码,下面列举几个:
NP:空指针被引用;在方法的异常路径里,空指针被引用;方法没有检查参数是否null;null值产生并被引用;null值产生并在方法的异常路径被引用;传给方法一个声明为@NonNull的null参数;方法的返回值声明为@NonNull实际是null。
Nm:类定义了hashcode()方法,但实际上并未覆盖父类Object的hashCode();类定义了tostring()方法,但实际上并未覆盖父类Object的toString();很明显的方法和构造器混淆;方法名容易混淆。
SQL:方法尝试访问一个Prepared Statement的0索引;方法尝试访问一个ResultSet的0索引。
UwF:所有的write都把属性置成null,这样所有的读取都是null,这样这个属性是否有必要存在;或属性从没有被write。
Dodgy 危险的
具有潜在危险的代码,可能运行期产生错误,下面列举几个:
CI:类声明为final但声明了protected的属性。
DLS:对一个本地变量赋值,但却没有读取该本地变量;本地变量赋值成null,却没有读取该本地变量。
ICAST:整型数字相乘结果转化为长整型数字,应该将整型先转化为长整型数字再相乘。
INT:没必要的整型数字比较,如X <= Integer.MAX_VALUE。
NP:对readline()的直接引用,而没有判断是否null;对方法调用的直接引用,而方法可能返回null。
REC:直接捕获Exception,而实际上可能是RuntimeException。
ST:从实例方法里直接修改类变量,即static属性。
Performance 性能问题
可能导致性能不佳的代码,下面列举几个:
DM:方法调用了低效的Boolean的构造器,而应该用Boolean.valueOf(…);用类似Integer.toString(1) 代替new Integer(1).toString();方法调用了低效的float的构造器,应该用静态的valueOf方法。
SIC:如果一个内部类想在更广泛的地方被引用,它应该声明为static。
SS:如果一个实例属性不被读取,考虑声明为static。
UrF:如果一个属性从没有被read,考虑从类中去掉。
UuF:如果一个属性从没有被使用,考虑从类中去掉。
Multithreaded correctness 多线程的正确性
多线程编程时可能导致错误的代码,下面列举几个:
ESync:空的同步块,很难被正确使用。
MWN:错误使用notify(),可能导致IllegalMonitorStateException异常;或错误的使用wait()。
No:使用notify()而不是notifyAll(),只是唤醒一个线程而不是所有等待的线程。
SC:构造器调用了Thread.start(),当该类被继承可能会导致错误。
Internationalization 国际化
当对字符串使用upper或lowercase方法,如果是国际的字符串,可能会不恰当的转换。
—最后编辑于2020-3-4 21:48[^1]
最后在这里建议使用2019.2以后的版本 因为2019.2版本更新了架构
总结
-
添加对 Java 13(预览版)的支持
-
支持 Switch 表达式以及 Java 13 中的新语法
-
使用 yield 关键字来处理 Switch 块中 switch 表达式的返回值
-
改进重构功能
-
改进 Scratch 文件的显示模式
-
添加对 shell 脚本的支持
-
打开大文件更迅速
-
macOS 拥有新的默认 keymap
-
显著的性能改进,尤其是启动速度
-
改进 Windows 平台的 UI,并引入全新的现代无边框外观
议使用2019.2以后的版本 因为2019.2版本更新了架构
总结
-
添加对 Java 13(预览版)的支持
-
支持 Switch 表达式以及 Java 13 中的新语法
-
使用 yield 关键字来处理 Switch 块中 switch 表达式的返回值
-
改进重构功能
-
改进 Scratch 文件的显示模式
-
添加对 shell 脚本的支持
-
打开大文件更迅速
-
macOS 拥有新的默认 keymap
-
显著的性能改进,尤其是启动速度
-
改进 Windows 平台的 UI,并引入全新的现代无边框外观
绿化便携版本idea-自带Material Theme UI等插件,强烈推荐
本文章包含了很多篇帖子的内容,更像一篇整合几篇帖子的帖子,甚至有些图都是帖子的。非常抱歉,由于东西太多,我忘了帖子的来源了…非常抱歉抱歉。
此贴也是备份自己的idea插件列表 非常适合刚使用idea的小伙伴们
发布的时候要贴转载帖子 我不记得了 无奈只好贴原创了