intellij
- 来阿里之前,还在使用eclipse,后来受@无独 同学影响,开始使用intellij,从此以后再也没想过回到eclipse。最近周边的人使用intellij越来越多,还有一部分在eclipse和intellij之间徘徊选择,本文目的是通过我们介绍intellij的功能,让大家对intellij更了解,如果想从eclipse改到intellij,下面增加eclipse中常用功能和intellij上的对应关系,希望能够帮助大家快速熟悉intellij。
功能介绍
- 下面列举了一些常用的功能,功能远不止这些,大家体验一下就知道了,官方features
提升编码效率
Smart completion
- 根据变量的类型,生成推荐列表,并列表中的推荐代码,会根据你的使用频率,将常用的代码,移动到上面。例如:图中SecureRandom选中一次之后,下次再random=new 提示列表SecureRandom会显示在最上面。
Chain completion
- 相比(Smart completion)提示更深入一层。如图,会结合上下文,生成推荐列表,例如:根据上面定义的strings变量和args参数,推荐foreach可能会使用到这两个变量,并且把strings放在第一位。
Inspections and quick-fixes
开发者的角度设计
以编辑为中心
Inline debugger
内置好用的开发者工具
- 开发过程中,除了编辑代码,还会用到其他的框架和工具完成开发工作(svn/git/maven等)。intellij直接集成了这些好用的工具。
Version control
- 集成了svn/git等版本控制工具客户端的功能,并且非常好用,不需要自己安装插件。
maven 插件
- intellij与maven集成的非常好,编辑pom的智能提示、pom修改后依赖自动更新导入和处理二方库间的依赖关系。
Decompiler
- 查看没有源码的class时,大家都会用到。
Terminal
- 简单操作,不离开编辑器就可以打开终端执行命令,并且终端打开后,直接定位到所在的项目目录。
为何放弃eclipse
- 看过上面的功能介绍,应该已经可以感受到intellij比eclipse好的地方了吧。下面再简单说明一下,我使用过程中的感受。更多的点大家体验一下就知道了。
编辑
- 自动完成和提示功能(Smart completion/Chain completion),比eclipse更智能。
- inspections 功能很强大,帮你优化代码,查找问题,以后再也不用每周五定闹钟执行findbugs了。
- 项目中文件内容通过terminal或者其他方式修改了,不需要自己刷新,intellij自动检测到变更加载修改。
- 很多地方的搜索很给力,都会有高亮,例如:编辑里常用的几个操作(最近修改的文件、类结构等等)都支持搜索、设置里面的搜索、快捷键里面的搜索,体验到就知道了。
- eclipse透视图有印象没,就是各种模式(javaee/java/debug/package explorer),当我们在处理不同的内容时,Eclipse总是试图为我提供“最佳的透视图”。对于我来说,我看到的只是每次从开发切换到调试或是重构透视图时,屏幕的布局就会变得一团糟。intellij就会好很多,这个自己不说了大家自己体会好了,如果你是键盘控,intellij绝对不错的,打开和关闭类似eclipse里面的package explorer(eclipse里面真心记这个快捷键太费劲)直接简单的cmd+1就搞定,后面会演示。
- 集成了多种语言的开发环境,并且操作都很统一。例如:JavaScript、velocity、html等都会语法提示(这个提示比eclipse好多了),快捷键也是一样的。
debug
- 首先不会跳转到debug的透视图。
- Smart step into功能:如果一行中存在多个方法调用,可以选择进入到哪个方法中。
- Inline debugger:上面讲了,直接在代码右侧显示变量的值。
内置工具
- maven插件,
- 依赖管理:A依赖B,刚导入的A之后,A会依赖B的jar,再导入B之后,A就会直接依赖B这个工程了,删掉B同理,会直接又依赖回B的jar(eclipse需要修改build path/mvn eclipse:eclipse)。
- 项目导入:只要你的工程有pom文件就ok,选中pom直接导入工程,这功能后面会演示(eclipse上,我们要先执行mvn eclipse:eclipse后,再导入)。
- svn/git插件也比eclipse的好用,功能更强大。
- 其他的如Decompiler功能,eclipse都需要额外安装。
intellij开发常用功能
- 为了方便大家从用intellij替换eclipse,这里面列出我们eclipse常用操作对应在intellij里面要怎么实现(主要都是我常用的,可能不够全面慢慢会补全)。
概念
- 理解intellij和eclipse不同的概念搞清楚,后面就好弄多了
- project(intellij)==workspace(eclipse)
- module(intellij)==module(eclipse)
工程
创建工程
- 打开intellij 选择create new project
- 工程创建成功后,会提示导入modules(一个module相当于我们的一个应用/二方库),点击+,import module导入已存在的maven项目
- 一路下一步,第一次使用没有配置SDk,参照下图,找到jdk安装目录。
- SDK也可以在Dependencies中配置
- 默认依赖存储在项目的.iml文件中,eclipse是存储在.classpath中,此处可以选择(默认即可)。
导入应用/二方库
-
工程创建成功后,可以通过file->import modules导入应用/二方库,对于maven项目选择工程的pom文件,下一步下一步就ok了
-
对比eclipse:
- 不需要像eclipse那样执行mvn eclipse:eclipse,有pom即可导入
module之间的依赖
- 对于intellij基本上不需要手工修改依赖,导入时maven插件自动识别依赖关系,例如:图中finance-partner依赖二方库qualification-open-share,导入二方库时会自动将对二方库的依赖,由依赖jar包,改为依赖二方库module,可以通过product structure(快捷键cmd+;)查看。
- 对比eclipse:
- 需要通过eclipse build path方式编辑
修改iml文件:类似eclipse classpath方式
编辑
- 下面主要说下编辑中的常用操作,里面涉及的快捷键都是我设置的,如果你的不好用,每个操作我都写了名字,可以到keymap里面去自己查找和修改。
快捷键相关(必看)
- intellij 快捷键,到perferences里面搜keymap,可以直接修改成eclipse的(我觉得既然用就彻底一点,不要用这个快捷键),或者copy一个mac 10.5+ 自己进行修改,可以根据名字搜索。
- tips:intellij的查找很高端的,还可以直接用快捷键查找,如果你知道快捷键,但是不知道这个操作在那里或者叫什么名字,可以用快捷键反查。
创建class/package
- File->new...->class 很简单.(快捷键:我的快捷键ctrl+N)
- tips:说实话这个功能,设计的很简单,刚开始的时候我以为创建类的时候不能设置包,要先创建好package,然后在包下面创建类,原来不用,创建类的时候直接写:com.alibaba.Test就ok了,会帮你自动创建好包名。
类旁边的小图标
- intellij里面文件左侧都有小图标,C代表是类(蓝色的),I代表是接口(绿色的),还有一种C的蓝色小标上面有一块绿色能猜得到吗?答案在图下面
- 答案: 抽象类
查找类
查找普通文件
- intellij Navigate->File..(快捷键:我的 cmd+shift+N)
查看类结构(包含哪些方法什么的)
- intellij 里面 Navigate->File Structure (快捷键,我的是cmd+F12)。功能如图:
查看类的定义
- 同eclipse里面的open declaration(快捷键:F3),intellij Navigate->Declaration(快捷键 我的cmd+B)
- 如果不想离开当前编辑的tab,直接view->quick definition(cmd+shfit+I),在当前窗口查看。
查看类/接口实现
-
同eclipse里面的quick type Hierarchy(快捷键:cmd+T),intellij Navigate->Implementation(s)(我的快捷键 cmd+alt+B)
查看javadoc
-
同eclipse里面的F2,可以看到类或者方法的javadoc, intellij View->quick Documentation (ctrl+J)
格式化
- eclipse 右键source->format, intellij Code->Reformat Code....(alt+cmd+L)
- intellij格式化设置,打开Perferences...(cmd+,),找到code style->manager 导入alibaba-intl-format文件
设置在intellij保存时的自动format code
参考 http://stackoverflow.com/questions/946993/intellij-reformat-on-file-save, 录制一个宏即可.
Edit -> Macros -> Start Macro Recording
Code -> Reformat Code
File -> Save all
Edit -> Macros -> Stop Macro Recording
Name the macro (something like "formatted save")
File -> Settings -> Keymap
Right click on the macro. Add Keyboard Shortcut. Set the keyboard shortcut to Control + S.
IntelliJ will inform you of a hotkey conflict. Select "remove" to remove other assignments.
格式化import设置
- intellij 默认有个设置(一个类里面同一个包下面的类达到5个就会自动合并成xxx.xxx.*;),首先说下这个的问题。
trunk代码,版本一
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
修改->intellij格式化后,ci到trunk,版本二
import java.util.*;
xxxx
new HashMap();//注意新增了HashMap
从版本一 checkout代码,eclipse格式化后,版本三
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
xxxx
版本三开发完了,与现在的trunk(版本二合并)
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
xxxx
new HashMap();//注意新增了HashMap
上面是合并后的代码,有没有发现什么不对,是的,代码编译不过了,因为没有import java.util.HashMap没有。这就是用*的问题。
- 我们平时开发还是推荐,用哪个就引用哪个,不用的就不引用。所以建议把合并成 import xxx.xxx.*;这个设置改掉,方式就是把默认的5/3改成100好了(哪个包下面要是有100个类,那就算我们运气差,再改大点),如图:
最近使用的文件
- 开发过程中经常来回修改多个文件,intellij里面View->Recent Files(cmd+E),而且继续搜索呢, eclipse里面,没发现查找最近使用的文件功能(不过可以从打开的文件里面去搜索)。
- 除了可以查找最近使用的文件,还可以查找最近使用的tool windows,如图中左侧列表
查看被谁调用了
- eclipse 里面的 Open Call Hierarchy
- intellij Edit->Find->Find Usages File(cmd+F7)
eclipse里面的quick fix 功能
- eclipse里面写代码的时候,左侧会出来一个小黄点或者你自己按下(cmd+1),就会展示出来一些建议。
- intellij也有这个功能,并且提示更智能一点。Show Intention Actions(alt+回车)
生成代码功能(get/set等)
- 经常要生成get、set等方法,intellij上跟eclipse一样可以自动生成,只需要自己选择一下,快捷键: Main->code->Generate...(shift+N)
- ps: 我刚开始很傻的以为一次只能生成一个get方法,其实按住shift,移动上下键,就可以选择多个了。
前一个位置/后一个位置
- 方便来回移动,例如:进入一个类想退回来,可以选择recent files里面找到再回来,也可以直接 Query class 不过的多麻烦啊,直接Navigate->Back (alt+cmd+左箭头)/Navigate->Forward(alt+cmd+右箭头)
最大化编辑的窗口
- 两种常用模式:
- Full Screen mode模式,将编辑窗口全屏。(view->Full Screen mode)
- Presentation mode模式,会将代码字体放大,适合做编辑演示。(view->enter Presentation mode)
定位到module文件的位置
- eclipse里面有个功能,左侧视图点击一下直接展开工程定位到当前编辑的那个文件。
- intellij也有,不过图标变成了一个小地球,还可以勾选右侧两个选项自动定位和收起。
-
tips:其实最好的是它还有快捷键(eclipse里面我不知道是什么),这样就不用点了。intellij Navigate->Select In....(alt+F1)
跳转到某一行
-
快捷键默认cmd+g,菜单navigate->line...
live template模板
- 针对结构类似的代码,intellij提供了模板功能(live template),只需要敲几个字母就可以生成一段代码,以下是默认的几个模板例子。
- 生成foreach
ArrayList<Object> objects = Lists.newArrayList();
//输入iter按tab,自动生成以下代码,参数objects是intellij根据上下文自动匹配上的
for (Object object : objects) {
}
//sout生成+tab,生成
System.out.println();
//编辑pom文件时,输入dep+tab生成
<dependency>
<groupId>$GROUP$</groupId>
<artifactId>$ARTIFACT$</artifactId>
<version>$VERSION$</version>
</dependency>
File and Code Templates
- 类注释@author等信息
- 文件模板
- 使用和配置见另一篇ata文章
其他
查询快捷键及相关操作
- 记不住快捷键,快速搜索和执行你想找的操作
- 快捷键:cmd+shift+A
内部集成的工具
version control
svn
- 每次到终端去svn up/svn commit 多麻烦,直接插件+快捷键解决。eclipse有subversion插件,intellij也一样,并且功能更强大。
update&commit
- intellij 的subversion插件默认就带了,不像eclipse装上之后想设置快捷键还挺麻烦的。工程导入进来,直接右键就可以看到菜单。我习惯上alt+cmd+c = svn commit ,alt+cmd+u= svn update
commit
- 提交功能很强大,跟终端就不比了。与eclipse的插件比右侧多了,很多操作,例如提交前格式化代码,检查你有哪些文件可以优化,有警告啊,有todo没做啊
颜色变化
- eclipse里面可以在项目上通过*号看到是否有修改,intellij也是可以的,不过是通过颜色,
- 没修改时是黑色
- 有修改时是浅蓝色
- 新增的文件是绿色的
- 修改过的文件是蓝色的
查看 修改的文件
setting
- 直接在ide setting里面有version control相关的配置,默认就支持了git&hg&svn
git
maven
- 只能说intellij和maven集成的太好了
使用
- 功能不讲了,自己体会吧,最开始也说了一个好处,会自动帮大家识别依赖,包括自己修改pom也会自动识别。对比eclipse的maven插件,intellij有个单独的tool window操作很方便,除了默认帮你搞的那些,你想自己执行个mvn clean install -Dmaven.test.skip之类的,直接点一下就ok(省去了进入terminal->cd xxx->执行命令 好几个步骤呢!)。 如果执行要跳过测试,在ide设置里面勾一下就行了。PS:(window可以设置快捷键的,我设置成cmd+7) 话少说,上图:
- maven的vm参数,改改参数,intellij会更快,大家都懂得。这里要设置两个运行时和项目导入时maven的设置。
插件
插件安装
推荐插件
ideaVim
- 通过vim的方式写代码,基本上支持vim的大部分功能,比eclipse上的vim插件好用太多。
color theme插件
这里有IDEA版本的color插件 [http://ideacolorthemes.org/home/]
安装过程:
- 下载 theme的jar包
- File->Import Setting->导入jar包即可
- 切换主题:preference->editors->colors & fonts 选择对应的scheme
建议先切换到默认的暗色主题,然后再切换color theme,这样侧边栏也会变成暗色
修改配色:preference->editors->colors & fonts下面的子选项可以自定义各个配色,直接点击要改部分的颜色即可。
checkStyle
- 结合checkStyle配置文件,检查代码是否符合规范。
junit generator
- 辅助生成junit单元测试类
ASM ByteCode
- 查看类文件生成的字节码
lombok plugin
- 配合lombok使用,lombk官网