简介

IDEA是JetBrains开发的集成开发环境(IDE),主要用于java开发。这里记录一些使用IDEA过程中碰到的问题和使用经验。

基本概念

项目和模块

IDEA开发Java项目时几个基本概念:项目 project、模块 module、facet、artifact

  • 项目 project:使用IDEA进行开发工作中的顶级组织单元,一个项目代表一个完整的软件解决方案
  • 模块 module:一个项目包含多个模块,模块是项目的一部分,可以单独编译、运行、测试,模块可以复用。通常一个项目中会按照功能划分出多个模块
  • facet:表示在module中使用的各种各样的框架、技术和语言
  • artifact:是一个项目资源的组合体

项目和模块的区别:

  • 项目是一个单纯的目录,是代码的顶级组织单元,IDEA默认是单项目单模块的
  • 模块会继承项目的环境,并且可以有自己的环境,一个项目会打成一个独立的jar包。

创建一个空项目,用空项目来管理子模块,一个项目中如果有子模块,那么项目中不应该有任何代码,并且应该打包为一个pom,模块中还可以再有子模块,pom文件中的groupId可以被子模块继承

常用配置

配置视图

设置一次只能打开一个项目

在这里插入图片描述

设置主题

路径: file - settings - Appearance & Behavior - Appearance,Theme对话框
在这里插入图片描述

设置背景颜色

  • 设置背景颜色:File - Settings - Editor - Color Scheme - General - Text -Default Text - Backgound,点击颜色框,分别输入217、242、208,点击choose。
  • 修改单行注释的颜色:File - Settings - Editor - Color Scheme - Language Defaults - Comments - Line Comment,选择自己喜欢的颜色即可
  • 修改yaml文件中单行注释的颜色:File - Settings - Editor - Color Scheme - YAML - Comment - 取消勾选Inherit values from,勾选blod、forground

设置字体

  • 修改字体大小:appearance & behavior - appearance - size - editor - font - size ,这个参数用于调整文件、控制台、终端等位置的字体大小。
    在这里插入图片描述

  • 修改注释的字体:File -> Settings -> Editor -> Color Scheme -> Java -> Comments,有三个选项,Block Comment是块注释,JavaDoc是文档注释,Line Comment是行注释,如果想要修改字体,取消勾选“Inherit values from Comments - Block Comment”,然后修改字体。

设置文件列表的排序方式

设置左侧文件列表的排序方式为按照文件夹和文件排序

路径:点击左上角的设置图标,选中:Sort by Type、Folders Always on top
在这里插入图片描述

设置文本自动换行

在这里插入图片描述
勾选“soft-wrap these file”,对于指定类型的文件,如果无法完整地显示一行,会自动换行,可以指定文件类型,使用分号做分隔符,* 做通配符,这里只是对于普通的文本文件自动换行。
勾选“Use the original line’s indent for wrapped fragments”,表示自动换行后缩进和上一行保持一致

设置代码长度提示线

在这里插入图片描述
勾选 wrap on typing,在 hard wrap at 对话框中设置字符个数,一行的字符超过这个个数,自动换行。
效果:屏幕上会展示代码长度提示线,避免一行代码超长
在这里插入图片描述

tab页标签相关设置

换行显示tab页标签

路径:file - settings - editor - general - editor tabs,勾选show pinned tabs in a separate row,取消勾选 show tabs in one row,
在这里插入图片描述
效果:如果tab标签一行展示不下,会分多行展示
在这里插入图片描述

固定标签页后不换行显示

一个文件tab被固定后会单独一行展示,取消这个特性:setting - editor - general - editor tabs - 取消勾选“show pinned tabs in a separate row”

控制最多打开n个tab页

在这里插入图片描述
设置tab limit选项

配置代码提示不区分大小写

在这里插入图片描述
取消勾选match case

配置一个包下的多个导入不会合并成*

编辑器 -> 代码样式 -> Java -> 设置选项 “将import与*搭配使用的类计数” 、 “将静态import与*搭配使用的名称计数”

快捷键

  • 格式优化:ctrl + alt + l
  • 撤销:ctrl + z
  • 取消撤销:ctrl + shift + z
  • 返回上一次的查看点:ctrl + alt + 左箭头

常用操作

查看API

  • 查看类所在jar包名:鼠标定位到类名上,按 ctrl + b,就可以打开类文件,再点击项目左上角 设置 - selected opened file,就可以查看类在jar包中的位置
    在这里插入图片描述

  • 查看类的结构:左上角的 structure 选项,描述了类的结构
    在这里插入图片描述

  • 查看类或接口的实现类:光标定位到类上,按ctrl + h

  • 查看一个方法被哪些类调用过:光标定位到方法上,ctrl + 鼠标左击

  • 查找:

    • ctrl + shift + f:全局搜索,注意file mask,它会过滤文件类型
    • ctrl + e:最近打开的文件
    • 跨文件搜索内容:右击文件夹,选择 find in path
    • 使用正则表达式查找数据:ctrl + f,点击 .* 开启正则表达式
  • 替换:ctrl + r

案例:替换文本为换行符:IDEA不支持使用正则表达式来指定换行符,需要点击搜索框右侧的换行符按钮
在这里插入图片描述

解决properties文件中文乱码问题

在IDEA - File - settings - encoding 中进行设置,设置properties文件的编码方式为UTF-8
在这里插入图片描述

创建类时自动生成注释

这属于文件模板功能。

点击 Setting - Editor - File and Code Templates,点击 Include,输入要自动生成的注释,然后点击apply即可

在这里插入图片描述

自动优化导包

路径:file - settings - Editor - General - Auto Import - 勾选:Add unambiguous imports on the fly、Optimize imports on the fly
在这里插入图片描述

配置IDEA向github提交代码

第一步:配置IDEA登录github

  • 点击 Settings - Version Control - Github
  • 点击 add acount - log in with token,然后会登录到github,进入生成token的页面,需要配置token的过期日期,然后点击生成,把生成的token粘贴到IDEA中

第二步:配置IDEA关联git

  • 点击 设置 - Version Control - Git,配置git的安装路径

第三步:把远程仓库关联到本地的git仓库,git remote add <name> <url>,url是远程库的url,在github页面上可以找到。name通常叫origin。如果远程仓库是空的,本地的内容可以直接提交到远程仓库,如果远程仓库有内容,应该先把远程仓库的内容clone下来。

debug技巧

1、在debug的时候抛异常:右击方法的栈帧,选择Exception
在这里插入图片描述

配置代码格式文件 codestyple.xml

codestyple.xml是代码格式文件,存储了代码格式,公司通常会通过这个文件来限制代码格式。

配置codestype.xml:点击 settings - editor - code style,在操作界面中,可以安装用户自定义的codestyle.xml
在这里插入图片描述

导出配置

导出IDEA中的配置:File - Manage IDE Settings - Export Settings,导出为一个zip文件

代码运行

设置允许一个类并行执行

右击 - 选择 Modify Run Configuration - Modify Options - Allow multiple instances

添加虚拟机参数

第一步:打开当前程序的配置页

在这里插入图片描述

第二步:Add VM options
在这里插入图片描述

第三步:此时页面上会多出一个输入框

在这里插入图片描述

输入虚拟机参数,例如 -XX:+PrintCommandLineFlags,这个参数用于在程序启动后打印虚拟机参数。

不常用的操作

有些操作只碰到过一次或几次,在这里也做个记录

将项目下的某个文件夹添加为模块

  • 第一步:file - project structure - 点击 加号。
  • 第二步:该模块需要有正确的pom文件

打一个可执行的jar包

基本步骤:

  • 第一步:
    • File - Project Structure - Artifacts - 点击 “+”
    • 选择“JAR”- 选择“From module with dependencise”
      • 在弹出的对话框中, 设置main class
      • 选择copy to the output directory and link via manifest,代表把依赖的jar包复制到输出目录并且通过mainfest文件来保持连接,这种方式更灵活
    • 点击OK
  • 第二步:退出File,点击Build - Build Project,生成META-INF文件夹
  • 第三步:点击Build - Build Artifacts,选择jar包,点击build
  • 第四步:jar包放在根目录下的out\artifacts文件夹中

重命名某个模块

  • 修改父项目的module标签
  • 修改模块对应的文件夹的名称
  • 修改模块中的pom文件

反编译字节码文件

方式一:安装插件

安装两个插件:Bytecode Viewer、Java Bytecode Decompiler

方式二:使用javap
  1. 第一步:点击 File - settings - Tools - External Tools,

  2. 第二步:点击 加号 图标,新增外部工具

  3. 第三步:在弹出的对话框中输入:

    • Name:javap
    • Description:反编译java字节码
    • Program:JDKPathJDKPathJDKPath\bin\javap.exe
    • Arguments:-v OutputPathOutputPathOutputPath$FileDirRelativeToSourcepath$$FileNameWithoutAllExtensions$.class,点击 + ,可以查看一些IDEA预定义的变量。使用到的变量的含义:
      • OutputPath:输出路径,字节码文件的输出路径,例如:E:\java\jvm-learn\out\production\jvm-learn
      • FileDirRelativeToSourcepath:文件所在包的路径,例如,org\wyj\jvm\p10
      • FileNameWithoutAllExtensions:不包含扩展名的文件名
    • Working directory:OutputPathOutputPathOutputPath
  4. 第四步:点击 OK

使用经验

  1. 在设置某个配置时,如果是全局配置,最好把所有程序都关掉,避免全局配置设置的不成功
  2. 一个普通的maven项目,只要有src文件夹和pom文件,就可以使用IDEA打开并执行代码
  3. IDEA中将一个jar包添加为项目依赖:普通的java项目,没有使用maven。将jar包放在根目录的lib目录下,右击jar包,选择 add as library
  4. 比较两个文件之间的差异,左边是旧的,右边是新的。

git 查看某次提交时整个仓库的代码

打开IDEA中的git控制台,右击某次提交,选择 show repository at revision。

常见问题

maven相关

执行maven命令时报错. GC overhead limit exceeded

报错信息:GC overhead limit exceeded

解决方案:配置IDEA为maven分配的内存,settings - build - maven - runner -> 配置 vm options -Xmx6G

maven 编译时报错 zip file is empty

报错信息:java: 读取 …jar 时出错; zip file is empty

解决方法:删除报错jar包,重新安装

编译时没错,但是运行时报没有这个方法 NoSuchMethod

原因:编译时和运行时使用的库可能不一致

解决方案:重新加载maven,reload project,如果项目比较大,可能会遇到这样的问题,更新依赖后,编译时没有问题,但是运行时报错。
在这里插入图片描述

项目编译时报错

报错1 JPS incremental annotation processing is disabled

报错信息:JPS incremental annotation processing is disabled. Compilation results on partial recompilation may be inaccurate. Use build process “jps.track.ap.dependencies” VM flag to enable/disable incremental annotation processing environment.

  • 翻译: JPS(Java Project System)增量注解处理已禁用。在部分重新编译时,编译结果可能不准确。使用构建过程中的“jps.track.ap.dependencies”VM标志来启用或禁用增量注解处理环境。

解决方案:在 Settings - Build Execution Deployment - Compiler中,在Share build process VM options中,添加参数:-Djps.track.ap.dependencies=false,关闭增量注解处理

-Djps.track.ap.dependencies 是一个Java虚拟机参数,用于控制在使用IntelliJ IDEA等IDE进行编译时是否启用增量注解处理。增量注解处理是 Java 编译过程中的一个特性,它允许在源代码改变时只重新编译受影响的部分,而不是整个项目。

这个参数可以以两种方式启用或禁用增量注解处理:

  • 启用增量注解处理:使用 -Djps.track.ap.dependencies=true。这是默认设置,通常不需要显式指定,因为这是增量注解处理的默认行为。
  • 禁用增量注解处理:使用 -Djps.track.ap.dependencies=false。禁用后,IDEA 将不会尝试只重新编译受影响的部分,而是在每次编译时都执行完整编译。

JPS 增量注解进程:一个 Java 编译工具,旨在提高编译速度。它通过持续监控文件系统中的更改来仅重新编译那些发生过改动的文件,从而避免了重复编译。这对于大型项目和频繁更改的代码库非常有用。

lombok相关

编译时报某个符号不存在

问题:使用build命令执行编译时,报“某些符号不存在”的错误,这些符号都是lombok相关的符号。仅仅只是执行build命令时报错,代码中相关符号没有飘红

解决办法:执行 build -> rebuild project 命令

问题分析:造成这个问题的原因有很多,网上也有很多资料,我做了一些总结。

  1. 项目的lombok依赖和IDEA的lombok插件,这两个要匹配。我没有遇到过类似的问题,但是,编译错误和idea插件没有关系,不需要动它,如果删除idea中的lombok插件,编写代码时idea将无法解析lombok相关的符号,符号会飘红

  2. 修改配置 build - compiler - annotation processors,勾选 enable annotation processing

  3. 检查项目的结构 project structure,确保是jdk1.8

  4. 清空缓存、重启IDEA

报错2 lombok编译时报错

报错信息:java: You aren’t using a compiler supported by lombok, so lombok will not work and has been disabled.
Your processor is: org.jetbrains.jps.javac.$Proxy8
Lombok supports: sun/apple javac 1.6, ECJ

分析:这个错误信息表明用正在使用的编译器不受lombok支持

解决方法:启用 Annotation Processors。配置 File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors 启用。

项目启动时报错

A JNI error has occurred

报错内容:A JNI error has occurred, please check your installation and try again

解决方案:点击 Edit Configuration,添加参数:Add dependencies with “provided” scope to classpath
在这里插入图片描述
表示将具有provided作用域的依赖添加到项目的类路径中。这使得在开发和调试阶段,这些依赖可以被使用。

JNI是一种编程框架,允许Java代码与用其他编程语言(如 C 或 C++)编写的本地代码进行交互。它提供了Java与本地代码之间的桥梁,使得Java程序可以调用本地方法(Native Methods),访问本地资源,或者被本地代码调用。

Command line is too long

报错原因:因为IDEA集成开发环境运行源码的时候,是通过命令来启动java进程的,这个命令主要包含两大部分:vm参数、-classpath参数,依赖的jar包越多,-classpath参数就越长,导致command line is too long。

解决方案:点击 edit configurations,在command line上选择下面任何一个选项:

  • jar manifest:IDEA临时把项目打包,在jar包的MANIFEST.MF文件中定义类路径属性
  • classpath file:IDEA把长路径写入文本文件

xml文件解析报错

报错情况:xml文件中无法解析它引用的xsd文件或dtd文件

解决方案:点击more action - fetch external resource,下载外部资源

执行测试类时提示资源不足

解决方案:为IDEA分配更多内存

  • help - change memory settings
  • help - edit custom vm options
  • file - settings - build - compiler

IDEA卡顿

解决办法:

  • Help - Edit Custom VM Options,添加配置:-Xmx2048m,设置IDEA的最大内存
  • 底部栏 - 右击 - Memory Indicator,在底部会显示占用内存的情况,案例:379 of 2048M,表示上限是2048M,现在占用了379M
  • 删除无用的插件:Preference - Plugins
  • 重启IDEA

省电模式

File - Power Save Mode

学习IDEA的原理

使用IDEA启动一个类时执行的命令

D:\java\jdk\bin\java.exe 
   "-javaagent:
       C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1\lib\idea_rt.jar=57598:
       C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1\bin" 
   -Dfile.encoding=UTF-8 
   -classpath 
       D:\java\jdk\jre\lib\charsets.jar;
       D:\java\jdk\jre\lib\deploy.jar;
       D:\java\jdk\jre\lib\ext\access-bridge-64.jar;
       D:\java\jdk\jre\lib\ext\cldrdata.jar;
       D:\java\jdk\jre\lib\ext\dnsns.jar;
       D:\java\jdk\jre\lib\ext\jaccess.jar;
       D:\java\jdk\jre\lib\ext\jfxrt.jar;
       D:\java\jdk\jre\lib\ext\localedata.jar;
       D:\java\jdk\jre\lib\ext\nashorn.jar;
       D:\java\jdk\jre\lib\ext\sunec.jar;
       D:\java\jdk\jre\lib\ext\sunjce_provider.jar;
       D:\java\jdk\jre\lib\ext\sunmscapi.jar;
       D:\java\jdk\jre\lib\ext\sunpkcs11.jar;
       D:\java\jdk\jre\lib\ext\zipfs.jar;
       D:\java\jdk\jre\lib\javaws.jar;
       D:\java\jdk\jre\lib\jce.jar;
       D:\java\jdk\jre\lib\jfr.jar;
       D:\java\jdk\jre\lib\jfxswt.jar;
       D:\java\jdk\jre\lib\jsse.jar;
       D:\java\jdk\jre\lib\management-agent.jar;
       D:\java\jdk\jre\lib\plugin.jar;
       D:\java\jdk\jre\lib\resources.jar;
       D:\java\jdk\jre\lib\rt.jar;
       D:\java\jdk\src.zip;
       E:\java\java-high-level\out\production\java-high-level;
       E:\java\java-high-level\lib\jol-core-0.9.jar 
   org.wyj.memobj.MemObjTest

-javaagent参数的含义:指定一个代理,通过它可以查看程序的运行

其它开发工具

把一些其他开发工具零碎的操作技巧也总结在这里

谷歌浏览器如何进行长截图

打开控制台 (command + option + i)、执行命令(command + shift + p)、输入 Capture full size screenshot,回车即可。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐