# IDEA使用

# Flag

查看类类图及继承关系

  • 选中类右键 -> Diagram -> Show Diagram Ctrl+Alt+Shift+U
    • 选中关系图中的名称,点击右键查看实现类 Show Implementations Ctrl+Alt+B
    • 选中关系图中的名称,点击右键查看父类 Show Parents Ctrl+Alt+P
  • 蓝色实线箭头是指继承关系
  • 绿色虚线箭头是指接口实现关系
展开查看思维导图

设置

Export Settings

导出设置时一定取消以下选项

  1. File templates
  2. File templates(schemes)
  3. Live templates
  4. Live templates(schemes)
  5. MavenVersion
  6. SDK Table

File -> Power Save Mode(节电模式) 勾选后将会导致提示、自动加载等都不生效

# 建立多级项目

特别说明:每个模块中的顶级包名(java目录下的包名)一定不能一样,否则编译器会把多个模块中的代码编译相互串连。 如:src/main/java/com/bajins/demo这里的com/bajins/demo就是顶级包名, 应该加上当前项目名src/main/java/com/bajins/demo/admin

创建顶级项目(根项目)

  1. 点击顶部菜单栏 File -> New -> Project(或在欢迎页面点击Create New Project) -> Maven(不要勾选Create from archetype) -> Next
  2. 填写 Name(项目名)、GroupId(包名)、Artifact(项目名),点击 Next
  3. 打开 pom.xml ,添加 <packaging>pom</packaging>(聚合工程或传递依赖用),如果有了就不用添加
  4. 删除除了 pom.xml 以外的其他文件和目录(包括src

创建子项目(二级项目)

  1. 在顶级项目名上点击右键弹出菜单(或点击顶部菜单File) -> New -> Module -> Maven(不要勾选Create from archetype) -> Next
  2. 填写 Name(项目名)、GroupId(包名)、Artifact(项目名) -> 点击 Next -> 选择 Parent(上级项目)放在最后操作是因为修改 Name 时会自动变化
  3. 打开 pom.xml ,添加 <packaging>pom</packaging>(聚合工程或传递依赖用)
  4. 删除除了 pom.xml 以外的其他文件和目录(包括src

创建子模块(最后一级项目)

如果还需要创建下级项目,重复创建子项目的操作即可

创建子模块只需要重复创建子项目,但是不要删除任何其他文件和目录,也不要添加<packaging>pom</packaging>

展开查看示例结构
demo                        # 顶级项目(根项目)
│  pom.xml
│  
├─admin                     # 二级项目
│  │  pom.xml
│  │  
│  ├─admin-api              # 二级项目模块
│  │  │  pom.xml
│  │  │  
│  │  └─src
│  │      ├─main
│  │      │  ├─java
│  │      │  └─resources
│  │      └─test
│  │          └─java
│  └─admin-web              # 二级项目模块
│      │  pom.xml
│      │  
│      └─src
│          ├─main
│          │  ├─java
│          │  └─resources
│          └─test
│              └─java
└─buyer                     # 二级项目
    │  pom.xml
    │  
    ├─shop                  # 三级项目
    │  │  pom.xml
    │  │  
    │  ├─shop-api           # 三级项目模块
    │  │  │  pom.xml
    │  │  │  
    │  │  └─src
    │  │      ├─main
    │  │      │  ├─java
    │  │      │  └─resources
    │  │      └─test
    │  │          └─java
    │  └─shop-client        # 三级项目模块
    │      │  pom.xml
    │      │  
    │      └─src
    │          ├─main
    │          │  ├─java
    │          │  └─resources
    │          └─test
    │              └─java
    └─user                  # 三级项目
        │  pom.xml
        │  
        ├─user-api          # 三级项目模块
        │  │  pom.xml
        │  │  
        │  └─src
        │      ├─main
        │      │  ├─java
        │      │  └─resources
        │      └─test
        │          └─java
        └─user-client       # 三级项目模块
            │  pom.xml
            │  
            └─src
                ├─main
                │  ├─java
                │  └─resources
                └─test
                    └─java

# 远程Debug

首先要设置启动JVM远程Debug参数

  • 点击顶部菜单Run点击Edit Configuration按钮 -> 出现弹窗,点击+按钮,找到Remote选项。
  • Name中填入Remote项目名称,在Host中填IP地址,在Port中填端口号,在Use Module classpath选择远程调试的项目module,配置完成后点击OK即可

启动项目时选择刚刚填的Remote项目名称

# 错误解决

# idea无限indexing解决方法

# OutOfMemoryError

idea Exception in thread "http-apr-8080-exec-2" java.lang.OutOfMemoryError: PermGen space

  • 打开顶部菜单Run -> Edit Configurations -> 应用名称如SpringBoot -> 目标项目 -> Configuration

  • Vm options中输入

-Xms2048m
-Xmx2048m
-XX:MaxPermSize=4096m
-Drebel.spring_plugin=true
-Drebel.spring_mvc_plugin=true
-Drebel.hibernate_plugin=true

# 启动进入欢迎界面

  • 打开File -> Settings -> Appearance & Behavior -> System Settings
    • 勾选Startup/Shutdown下的Reopen last project on startup选项

# 格式化代码

  • 打开File -> Settings -> Editor -> Code Style
    • -> General
      • Hard wrap at 设置行宽,会在格式化的时候强制插入换行符,形成显示效果上的换行
      • Wrap on typing 在编码时,超出最大行宽,则自动换行
      • Appearance -> Show whitespaces 设置显示空白字符
    • Java 在右侧的 Use tab character 不勾选,设置tab为4个空格
    • -> Java -> Wrapping and Braces
      • 勾选Keep when reformatting下的Line breaks 去除每次格式化时自动添加+符号
      • 勾选Keep when reformatting下的Ensure right margin is not exceeded 自动换行
      • Comment at first column false 代码格式化的时候保证commet符号在代码块附近
    • -> Java -> 右边选择JavaDoc
      • Enable JavaDoc Formatting 启用JavaDoc格式化
      • Wrap at right margin 右边缘换行,当最后一个单词会超出边界时,自动换行
      • Do not wrap one line comments 同一行注释不要换行
      • Preserve line feeds 保留换行
  • File -> Settings -> Editor -> General -> 右边Soft wrap (只会在 IDEA 的显示效果上有换行的效果,实际上并没有换行符)

缩进参考线

  • File -> Settings -> Appearance & Behavior -> Appearance -> 右边勾选 Show indent guides
  • File -> Settings -> Editor -> General -> Appearance -> 右边勾选 Show indent guides

垂直标尺

  • File -> Settings -> Editor -> General -> Appearance
    • 2018之前版本,右边勾选 Show right margin
    • 2018之后版本,右边勾选 Show hard wrap guideShow hard wrap and visual guides (configured in Code Style options)

# 去掉提示重复代码

  • 打开File -> Settings -> Editor -> Inspections -> General
  • 取消勾选Duplincated File Template Usage选项

# 去掉大小写敏感提示

  • 打开File -> Settings -> Editor -> General -> Code Completion
  • 取消勾选Match case,或者Case sensitive completion选择None

# 设置编码

  • 打开 File -> Settings -> Editor -> File Encodings
  1. Global Encoding 全局编码
  2. Project Encoding 项目编码
  3. Default encoding for properties files 属性文件的默认编码
  4. 勾选Transparent native-to-ascii conversion 从本地转换ASCII

# 设置序列化ID

  • 打开 File -> Settings -> Editor -> Inspections -> Java -> Serialization issues
    • 勾选Serializable class without 'serialVersionUID'
    • 勾选'serialVersionUID' field not declared 'private static final long'

# 自定义头部注释

  • 打开File -> Settings -> Editor -> File and Code Templates -> Includes -> 在File Header中添加
/**
 * 
 * @Description: 
 * @Author: ${USER}
 * @File: ${NAME}.java
 * @Version: 1.0.0
 * @Time: ${DATE} ${TIME}
 * @Project: ${PROJECT_NAME}
 * @Package: ${PACKAGE_NAME}
 * @Software: ${PRODUCT_NAME}
 */
  • 引用:打开File -> Settings -> Editor -> File and Code Templates -> Files
    • ClassInterfaceEnum三个模板中的public class ${NAME} {上一行添加
#parse("File Header.java")

# 自定义模板

  • 打开File -> Settings -> Editor -> File and Code Templates -> Files -> 在Class模板中粘贴
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

#parse("File Header.java")

public class ${NAME} {

     //private static final Logger logger = LoggerFactory.getLogger(${NAME}.class);
     private Logger log = LoggerFactory.getLogger(this.getClass());
     
}

# 预定义模板变量

变量 说明
${DATE} 当前系统日期
${DAY} 当前月的日期
${HOUR} 当前时刻
${MINUTE} 当前分钟
${MONTH_NAME_FULL} 月份全称,例如: January, February, etc.
${MONTH_NAME_SHORT} 月份名称的前3个字母,例如: Jan, Feb, etc.
${MONTH} 当前月份
${NAME} 在创建文件期间在新建文件对话框中指定的文件名称
${PACKAGE_NAME} 当前所在包名
${PRODUCT_NAME} 将被创建文件所在的IDE名称
${PROJECT_NAME} 当前项目的名称
${TIME} 当前系统时间
${USER} 系统的当前用户登录名称
${YEAR} 当前年份

# 自定义方法注释

  • 默认方法注释快捷键:/** + Enter
  • Template text
**
 * 
 * 
$params$
 * @return $ruturns$
 * @Description 
 * @author claer bajins.com
 * @date $date$ $time$
 */
  • @param参数获取代码Groovy脚本
// 使用tab作为参数后缀间隔符
groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {result+=' * @param ' + params[i]+'\\b'+ ((i < params.size() - 1) ? '\\n    ' : '')}; return result", methodParameters())
// 使用一个空格作为参数后缀间隔符,格式化时可以自动把所有参数对齐(推荐)
groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {result+=' * @param ' + params[i]+' '+ ((i < params.size() - 1) ? '\\n    ' : '')}; return result", methodParameters())
  • @return参数获取代码Groovy脚本
// 如果有返回参数使用一个空格作为参数后缀间隔符
groovyScript("def result=\"${_1}\"; if(result == 'void'){return '';}else{return result+' ';}", methodReturnType())

使用时,直接在方法上输入/加上你的Abbreviation名字,再按Tab键即可获取方法上的参数

  • 示例

# 鼠标悬停查看注释

  • 打开File -> Settings -> Editor -> General
  • 勾选Other下的Show quick documentation on mouse move选项
  • Other下的Tooltip delay输入鼠标悬停时间单位milliseconds(毫秒)

# 注释自动缩进

注释默认靠左,可能代码前会有很大一段空格

  • 打开File -> Settings -> Editor -> Code Style -> JAVAHTMLJavaScriptXMLTypeScriptGroovyKotlin
  • 右边选择Code Generation -> 取消勾选Comment Code下的Line comment at first columnBlock comment at first column

# 自动优化导包

  • 打开File -> Settings -> Editor -> General -> Auto Import
  • 勾选Add unambiguous imports on the flyOptimize imports on the fly(for current project)两个选项

Add unambiguous imports on the fly 自动帮我们优化导入的包,比如自动去掉一些没有用到的包。

Optimize imports on the fly(for current project) 自动帮我们导入需要用到的包。 但是对于同名的包,需要手动Alt + Enter进行导入。

# 热部署策略

  • 打开顶部菜单Run -> Edit Configurations -> 应用名称如SpringBoot -> 目标项目 -> Configuration
  • 选择Spring Boot -> Update classes and resources下的On 'Update' actionOn frame deactivation两个选项

On 'Update' action当代码改变的时候做什么

On frame deactivation当失去焦点,比如最小化IDEA窗口的时候做什么

# 自动编译

动态

  • 同时按住Ctrl + Shift + Alt + /然后点击Registry,勾选自动编译并调整延时参数。
  1. compiler.automake.allow.when.app.running自动编译(动态)
  2. compiler.automake.trigger.delay触发自动生成以响应文件系统事件之前的延迟(单位毫秒),默认300
  3. compiler.document.save.trigger.delay触发保存以响应文档更改之前的延迟(单位毫秒),默认1500
  4. compiler.build.report.statistics显示构建器的执行时间
  5. compiler.document.save.enabled是否启用项目保存以响应文档更改
  6. compiler.external.javac.keep.alive.timeout如果在指定的时间段或更长时间内未使用,则IDE将关闭缓存的javac编译过程

修改完成后直接敲回车即保存

静态

  • 打开File -> Settings -> Build, Execution, Deployment -> Compiler
  • 勾选Build project automatically自动构建项目,仅在未运行/调试时有效,静态
  • 勾选Complie independent modules in parallel并行编译独立模块,可能需要更大的堆大小

# 去掉局部背景色

去掉SQL检测

  • 打开File -> Settings -> Editor -> Inspections -> SQL
  • 取消勾选No data sources configured如果没有,则提示创建一个数据源。
  • 取消勾选SQL dialect detection<Generic>方言中的文件检测最匹配的SQL方言。

去掉背景

  • 打开File -> Settings -> Editor -> Color Scheme -> General -> Code
  • 点击Injected language fragment,去掉最右边的Background选项。

# 项目目录设置

# PyCharm

Python Script自定义头注释

  • File -> Settings -> Editor -> File and Code Templates -> Includes -> File Header中添加
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
#
# @Description: 
# @PreInstall: 
# @Author : ${USER}
# @File : ${NAME}.py
# @Version: 1.0.0
# @Time : ${DATE} ${TIME}
# @Project: ${PROJECT_NAME}
# @Package: ${PACKAGE_NAME}
# @Software: ${PRODUCT_NAME}
  • 引用:打开File -> Settings -> Editor -> File and Code Templates -> Files
    • Python Script模板中第一行引用:#parse("File Header")

# 自动导包

  • 打开File -> Settings -> Editor -> General -> Auto Import
    • 勾选Python -> Show import popup

# 函数注释

  • 打开 File -> Settings -> Tools -> Python Integrated Tools
  1. Docstring format 选择格式:默认Plain(空的)、Epytext(Python2)、reStructuredTextNumPyGoogle
  2. Docstrings -> Analyze Python code in docstrings 分析文档字符串中的python代码
  3. Render external documentation for stdlib 渲染stdlib的外部文档
  • 默认函数注释快捷键:""" + Enter

注意:如果使用函数注释时无法映射函数参数,在函数名中键入数遍光标,左上角亮起小灯泡, 点击小灯泡(或者使用快捷键Alt + Enter),再点击Insert documentation string stub选择注释格式

# GoLand

Go File自定义头注释

  • File -> Settings -> Editor -> File and Code Templates -> Includes -> File Header中添加
/**
 * 
 * @Description: 
 * @Author: ${USER}
 * @File: ${NAME}.go
 * @Version: 1.0.0
 * @Time: ${DATE} ${TIME}
 * @Project: ${PROJECT_NAME}
 * @Package: ${PACKAGE_NAME}
 * @Software: ${PRODUCT_NAME}
 */
  • 引用:打开File -> Settings -> Editor -> File and Code Templates -> Files
  • Go File模板中第一行引用:#parse("File Header")

# WebStorm

JavaScript File自定义头注释

  • File -> Settings -> Editor -> File and Code Templates -> Includes -> File Header中添加
/**
 * 
 * @Description: 
 * @Author: ${USER}
 * @File: ${NAME}.js
 * @Version: 1.0.0
 * @Time: ${DATE} ${TIME}
 * @Project: ${PROJECT_NAME}
 * @Package: ${PACKAGE_NAME}
 * @Software: ${PRODUCT_NAME}
 */
  • 引用:打开File -> Settings -> Editor -> File and Code Templates -> Files
    • JavaScript File模板中第一行引用:#parse("File Header.js")
  • 默认函数注释快捷键:/** + Enter