IDEA
发表于:2019-03-22 | 分类: IDEA

快捷键

作用 快捷键
单行注释 Ctrl+/
多行注释 Ctrl+Shift+/
封装-设置get和set方法 Fn+Alt+Insert
构造方法快捷键 Fn+Alt+Insert选择:constructor
重写toString()/equals()/hashCode()方法 Fn+Alt+Insert
折叠注释 定位到注释区内按住Ctrl+Alt+T,选择第二个选项
try catch final块等的生成 用鼠标框选代码后按住Ctrl+Alt+T进行选择
查看源代码 Ctrl+鼠标左键
提取方法 使用鼠标圈上要独立成方法的代码,按Ctrl+Alt+M
重写方法 Ctrl+O
批量修改变量名 鼠标左键双击,选中要修改的变量,按Shift+F6重命名后按Enter键即可
向下移动当前行内容 Ctrl+Shift+↓
向上移动当前行内容 Ctrl+Shift+↑
向右移动代码 Tab
向左移动代码 Shift+Tab
代码格式美化 Ctrl+Alt+L
向下复制当前行(或当前选中)代码 Ctrl+D
删除代码 Ctrl+Y
撤销 Ctrl+Z
反撤销(恢复) Ctrl+Shift+Z
查看源码 F4
代码大小写转换 Ctrl+Shift+U
断点调试 打断点Ctrl+F8
结束程序 Ctrl+F2
换行 Shift+Enter
查看一个类的继承体系 Ctrl+H
查看继承接口关系图 Ctrl+Alt+U
函数参数提示 把光标放到方法的小括号内按Ctrl+P
查看源码(进入方法) Ctrl+鼠标左键
跳转到方法实现处 Ctrl+Alt+鼠标左键
搜索 双击Shift两次
在源码中查看某类所有的方法 Ctrl+F12
从源码中返回上一级 Ctrl+alt+ ←
从源码中返回下一级 Ctrl+alt+ →
生成返回值变量 Alt+Enter
将局部变量提取为成员变量 Ctrl+Alt+F
在打开的多个Class类之间快速切换 Alt+左右箭头
查看最近打开或修改过哪些文件 Ctrl+E
关闭当前窗口 Ctrl+F4
关闭所有窗口 Ctrl+Alt+Shift+F4
快速定位错误或警告 F2
查看方法在哪里被调用过 Alt+F7
打开设置面板 Ctrl+Alt+S
添加至Favorites Alt+Shift+F
开启服务器 Shift+F10
断开服务器 Ctrl+F2
查找 Ctrl+F
查找替换 Ctrl+R
全局查找 Ctrl+Shift+F
快速定位到哪行 Ctrl+G
正常运行程序 Shift+F10
debug运行程序 Shift+F9
在HTML页面打开浏览器 Alt+R
清除未导入的包 Ctrl+Alt+O
打开依赖树 Ctrl+Alt+Shift+U
重新编译刷新当前项目的所有代码 Ctrl+F9
重新编译刷新当前文档的代码 Ctrl+Shift+F9
折叠所有的方法体 Ctrl+Shift+数字键-号
展开所有的方法体 Ctrl+Shift+数字键+号
打开控制台 F12
打开文件所在磁盘路径 Ctrl+Alt+F12 然后按Enter
查看某个方法在那些地方使用到了 Ctrl+Alt+h
鼠标点击接口方法进入接口实现类对应方法 Ctrl+Alt
commit代码 Ctrl+K
push代码 Ctrl+Shift+K
同时编辑多处 按住Alt+Shift,然后鼠标左键移动光标

IDEA全局配置(对所有项目都有效)

以后对IDEA进行的配置, 都弄成全局配置, 这样所有项目都有效. 不然有些配置可能只在当前项目中有效, 重新打开另一个项目就没有效果了.

IDEA全局配置, 需要在打开IDEA并还未进行到某个项目的时候进行设置,

如下图所示, 配置maven的全局配置(以后新建或打开的所有maven项目都会默认采用这个配置)
IDEA1
IDEA2

IDEA中Debug

debug模式下的图标和对应的意思
IDEA3

  1. show execution point(Alt+F10) 如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行。
  2. step over(F8) 步过,一行一行地往下走,如果这一行上有方法不会进入方法。
  3. step into(F7) 步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法,如第25行的put方法。
  4. force step into(Alt+Shift+F7) 强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。
  5. step out(Shift+F8) 步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。
  6. drop frame回退断点
  7. run to cursor(Alt+F9) 运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。
  8. evaluate expression(Alt+F8) 计算表达式
  9. 不知道
  10. 重新运行Rerun ‘xxxx’(Ctrl+F5):重新运行程序,会关闭服务后重新启动程序。
  11. rerun failed tests重新运行失败了的测试
  12. toggle auto test切换自动测试
  13. resume program(F9) 恢复程序,比如,你在第20行和25行有两个断点,当前运行至第20行,按F9,则运行到下一个断点(即第25行),再按F9,则运行完整个流程,因为后面已经没有断点了
  14. Pause Program:暂停程序
  15. Stop ‘xxx’ (Ctrl + F2):连续按两下,关闭程序。有时候你会发现关闭服务再启动时,报端口被占用,这是因为没完全关闭服务的原因,你就需要查杀所有JVM进程了。
  16. View Breakpoints (Ctrl + Shift + F8):查看所有断点
  17. Mute Breakpoints:哑的断点,选择这个后,所有断点变为灰色,断点失效,按F9则可以直接运行完程序。再次点击,断点变为红色,有效。如果只想使某一个断点失效,可以在断点上右键取消Enabled

IDEA 远程调试linux服务器上的代码

准备工作

  • 明确远程服务器的 IP 地址,比如我是:192.168.92.128
  • 关掉服务器防火墙:service iptables stop

本地 Remote Server 配置

  • 添加 Remote Server,如下图
    IDEA4

  • 复制 Remote Server 自动生成的 JVM 参数,等下有用,如下图,

比如我的是:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

  • 如下图,在 Host 添加服务器的 IP 地址:192.168.92.128。
    IDEA5

  • 把刚刚复制参数加个前缀,变成:

Linux(有单引号):
export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'

Windows(没有单引号):
set JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

服务器 Tomcat 配置

  • 以 Linux 环境为例
  • Tomcat 安装在 /usr/program/tomcat7
  • Tomcat 的执行程序:/usr/program/tomcat7/bin/catalina.sh
  • 编辑 Tomcat 执行程序:vim /usr/program/tomcat7/bin/catalina.sh(Windows 是编辑:catalina.bat)
  • 在该文件的最上面,添加我们刚刚复制的那句话:export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
  • 如果你的项目有特殊 JVM 参数,那你就把你的那部分参数和这部分参数合并在一起
  • 如下图所示:
    IDEA6

开始调试

  • 启动服务器 Tomcat
  • 启动本地 Remote Server
  • 如果可以看到如下图效果,表示已经连接成功了,接下里就是跟往常一样,

在本地代码上设置断点,然后你访问远程的地址,触发到该代码自动就会在本地停住。
IDEA7

  • 如下图,可以看到调试效果
    IDEA8

IDEA中Git&GitHub

idea中修改commit提交的信息
IDEA9

折叠所有代码,展开所有代码

在代码内任意位置鼠标右键选择expand all展开所有代码, collapse all折叠所有代码
IDEA10

模板

模板位置

快速补全模板位置:Settings———Editor————General————Postfix Completion

文件模板位置:Settings———Editor————Live Templates(可修改模板)

常用的模板:

模板1:main方法 psvm

public static void main(String[] args) {
        
}

模板2:输出语句 sout

System.out.println();

// 控制台打印语句快捷键的另外一种用法
//"a".sout 
System.out.println("a");

// 输出语句的变形1:soutv——打印变量的值
int num =10;
System.out.println("num = " + num);

// 输出语句的变形2:XXXsout——打印XXX变量的值
int num1 =10;
int num2 =12;
//下面语句由num1.sout打印出
System.out.println(num1);

模板3:for循环语句 fori

for (int i = 0; i < ; i++) {
            
}

模板4:增强for循环 iter

for (String arg : args) {
       
}

模板5:实现List接口的集合类的遍历 集合名.for

ArrayList<String> arraylist = new ArrayList<>();
for (String s : arraylist) {//这个增强for循环是使用:arraylist.for生成
            
}
```       
**模板6if条件判断语句**
```java
// 如果条件为空:条件.null
String str = "hello";
//str.null
if (str == null) {
            
}
// 如果条件不为空:条件.nn
String str = "hello";
//str.nn
if (str != null) {
            
}

模板7:生成private static final

  • 生成private static final:prsf
  • 生成public static final:psf
  • 生成public static final int:psfi
  • 生成public static final String:psfs
private static final

模板8:自定义的模板生成方法

// 生成public static void method(){}:psvo
public static void method(){

}

模板9: 生成lock代码块 输入trylock

lock.lock();
try {

} catch (Exception e) {
   e.printStackTrace();
} finally {
   lock.unlock();
}

模板10: 获取当前线程的线程名 输入mycurr

Thread.currentThread().getName()

模板11: 使用lambda表达式创建一个线程 输入newthread02

new Thread(() -> {  

},"threadName").start();

模板12: 使用匿名内部类创建一个线程 输入newthread01

new Thread(new Runnable() {
     @Override
     public void run() {
                
     }
}, "threadName").start();

模板13: 使用for循环快速创建10个线程 forthread10

for (int i = 1; i <= 10; i++) {
   new Thread(() -> {
                
   }, "thread" + i).start();
}

模板14: try-catch-finally代码块 trycf

try {
        
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        
    }

模板15: 生成thread sleep代码块 threadsleep

try { Thread.sleep(); } catch (InterruptedException e) { e.printStackTrace(); }

模板16: 生成带@Test注解的test方法 输入test回车即可
IDEA11
IDEA12

模板17: threadsleep

try { Thread.sleep(); } catch (InterruptedException e) { e.printStackTrace(); }

模板18: 生成springboot主启动类模板

创建模板
IDEA13
IDEA14

使用模板
IDEA15

输入主启动类的类名即可

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class,args);
    }
}

使得创建的class文件自带作者信息(alibaba代码检查要求类需要有作者信息)
IDEA16

mybatis-config.xml文件模板

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"/>
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <typeAliases>
        <package name="xx.xx.domain"/>
    </typeAliases>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/xx/xxMapper.xml"/>
    </mappers>
</configuration>

IDEA17

mybatis-mapper.xml文件模板

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">

</mapper>

IDEA18

db.properties数据源文件模板

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatisdemo
jdbc.username=root
jdbc.password=root

IDEA19

log4j.properties日志配置文件模板

log4j.rootLogger=ERROR,stdout
log4j.logger.whichPackage=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

IDEA20

logback.xml配置文件模板

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 定义日志的根目录(根据实际情况修改,此处./log会生成在当前项目根目录下) -->
    <property name="LOG_HOME" value="./log"/>
    <!-- 定义日志文件名称(根据实际情况修改) -->
    <property name="appName" value="parkour-mybatis"></property>
    <!-- 设置控制台输出的日志格式 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--
         日志输出格式说明:
                %d        输出日期时间
                %thread 输出当前线程名
                %-5level   输出日志级别,左对齐5个字符宽度
                %logger{50} 输出全类名最长50个字符,超过按照句点分割
                %msg   日志信息
                %n     换行符
        -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level ==== %logger{50} - %msg%n</pattern>
        </layout>
    </appender>

    <!-- 设置应用日志文件输出的格式  配置成每天生成一个日志文件,滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 指定日志文件的名称 -->
        <file>${LOG_HOME}/${appName}.log</file>
        <!--
        当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名
        TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责触发滚动。
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--
            滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 
            %i:当文件大小超过maxFileSize时,按照i进行文件滚动
            -->
            <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 
            可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。
         假设设置每天滚动,且maxHistory是365,则只保存最近365天的文件,删除之前的旧文件。
         注意,删除旧文件是,那些为了归档而创建的目录也会被删除。
            -->
            <MaxHistory>365</MaxHistory>
            <!-- 当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动(即按照i递增新创建一个文件记录日志) -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 日志输出格式: -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ------ [ %thread ] ------ [ %-5level ] [ %logger{50} : %line ] -
                %msg%n
            </pattern>
        </layout>
    </appender>

    <!-- root代表默认的日志级别, 设置默认的日志级别为info 既要在控制台输出,也要记录日志文件 -->
    <root level="info">
        <appender-ref ref="stdout"/>
        <appender-ref ref="appLogAppender"/>
    </root>


    <!-- 将日志保存到数据库的配置(使用c3p0连接池) -->
    <!-- <appendername="DB"class="ch.qos.logback.classic.db.DBAppender">
        <connectionSourceclass="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <dataSourceclass="com.mchange.v2.c3p0.ComboPooledDataSource">
                <driverClass>com.mysql.jdbc.Driver</driverClass>
                <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
                <user>root</user>
                <password>root</password>
            </dataSource>
        </connectionSource>
    </appender> -->

</configuration>

IDEA21

pom.xml文件模板

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

SpringBootMain主启动类模板

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
@SpringBootApplication
public class ${NAME} {
    public static void main(String[] args){
        SpringApplication.run(${NAME}.class,args);
    }
}

web.xml模板

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">
         
</web-app>

xml文件模板

<?xml version="1.0" encoding="UTF-8"?>

问题处理

1.Class文件图标上出现红色的J

按两下Shift键(或者按Ctrl+Alt+Shift+S)

输入project structure找到Modules点击以下Sources即可
IDEA22

2.IDEA中添加本地约束文件schema或dtd(可以解决XML文件写标签没有提示的问题)

File–>Settings–>Languages & Frameworks–>Schemas and DTDs,点击右上角的绿色加号

出现添加本地xsd文件弹窗,URI是你xml文件里引用该xsd文件的地址,File是你本地的xsd文件的所在目录

配置好之后,重启IDEA
IDEA23
IDEA24

3.IDEA中添加类注释和方法注释

类头注释:打开file->setting->Editor->Filr and Code Templates->Includes->File Header

直接在右边的文件框里编辑你说需要注释的东西,然后应用保存之后,当你创建类的时候就会自动生成注释。
IDEA25

方法注释:打开file->setting->Editor->LiveTemplates点击右边上面那个绿色的+号,选择Template Group双击,

然后弹出一个窗口,随便添加一个名字,我这里添加的是MyGroup然后点击OK
IDEA26

还是在file->setting->Editor->LiveTemplates这个路径下点击一下刚刚你添加的那个名字(我这是MyGroup),

然后点击右边上面那个绿色的+号,选择LiveTemplate双击,填写下面的图上的框
IDEA27
IDEA28
IDEA29

最后点击右下角的Edit variables 按钮,然后弹出一个窗口,如下:
IDEA30

设置完参数保存退出设置即可

4.IDEA中将单行注释与代码对齐
IDEA31

修改步骤:Settings–>Editor–>Code Style–>Java,然后按下图勾选。
IDEA32

IDEA中Maven的操作

1.IDEA中右边的maven projects窗口找不到了如何调出来

点击菜单栏View->Tool Windows->Maven projects

2.IDEA中进行maven清理clean打包package部署install时跳过测试test
IDEA33

3.Maven中的profile

  • Maven 中有一个概念叫做:profile,它的诞生主要是为了解决不同环境所需的不同变量、配置等问题。
  • 有了 profile,可以根据激活的条件,启动不同条件下的配置信息。
  • profile 是可以有多个的,也可以同时激活多个 profile,方便自由组合。
  • profile 一般可以在三个地方:settings.xml,pom.xml,profiles.xml(这个不常用)
  • 在 settings.xml 上,一般大家用来做仓库的选择,比如以下 settings.xml 代码:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    
        <localRepository>D:\maven\my_local_repository</localRepository>
    
        <pluginGroups>
        </pluginGroups>
    
        <proxies>
        </proxies>
    
        <profiles>
            <profile>
                <id>nexus</id>
                <repositories>
                    <repository>
                        <id>nexus</id>
                        <url>http://192.168.1.73:8081/repository/maven-public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </repository>
                </repositories>
                <pluginRepositories>
                    <pluginRepository>
                        <id>nexus</id>
                        <url>http://192.168.1.73:8081/repository/maven-public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </pluginRepository>
                </pluginRepositories>
            </profile>
            <profile>
                <id>aliyun</id>
                <repositories>
                    <repository>
                        <id>aliyun</id>
                        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </repository>
                </repositories>
                <pluginRepositories>
                    <pluginRepository>
                        <id>aliyun</id>
                        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </pluginRepository>
                </pluginRepositories>
            </profile>
        </profiles>
    
        <activeProfiles>
            <activeProfile>nexus</activeProfile>
        </activeProfiles>
    
    </settings>
  • 以上代码中 profile 就做一件事:设置全局的 profile,一个是 nexus 仓库,一个是 aliyun 仓库,默认激活的是 nexus 仓库。(activeProfiles)
  • 在 pom.xml 中,一般用来激活环境配置,比如以下代码:
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <package.environment>dev</package.environment>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <includes>
                            <include>**/*</include>
                        </includes>
                        <filtering>true</filtering>
                    </resource>
                    <resource>
                        <directory>src/main/env/${package.environment}</directory>
                        <includes>
                            <include>**/*</include>
                        </includes>
                        <filtering>true</filtering>
                    </resource>
                </resources>
                <finalName>${project.artifactId}</finalName>
            </build>
        </profile>
        <profile>
            <id>product</id>
            <properties>
                <package.environment>product</package.environment>
            </properties>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <includes>
                            <include>**/*</include>
                        </includes>
                        <filtering>true</filtering>
                    </resource>
                    <resource>
                        <directory>src/main/env/${package.environment}</directory>
                        <includes>
                            <include>**/*</include>
                        </includes>
                        <filtering>true</filtering>
                    </resource>
                </resources>
                <finalName>${project.artifactId}</finalName>
            </build>
        </profile>
    </profiles>
    ```    
    
    以上代码中 profile 就做一件事:打包的时候,默认是 dev 模式,打包 src/main/env/dev 下的配置文件,
    
    如果选择 product 则打包 src/main/env/product 下的配置文件
        
    **IntelliJ IDEA 使用 Maven Profile 的案例**
    
    在 IntelliJ IDEA 上调用 profile 简单,如下图勾选对应的复选框即可,可以多选。
    ![IDEA34](img/IDEA34.png)
    
    只使用 aliyun 仓库可以这样配置 settings.xml:
    ```xml
    <?xml version="1.0" encoding="UTF-8"?>
    
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    
        <localRepository>D:\maven\my_local_repository</localRepository>
    
        <pluginGroups>
        </pluginGroups>
    
        <proxies>
        </proxies>
    
        <profiles>
            <profile>
                <id>aliyun</id>
                <repositories>
                    <repository>
                        <id>aliyun</id>
                        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </repository>
                </repositories>
                <pluginRepositories>
                    <pluginRepository>
                        <id>aliyun</id>
                        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </pluginRepository>
                </pluginRepositories>
            </profile>
        </profiles>
    
        <activeProfiles>
            <activeProfile>aliyun</activeProfile>
        </activeProfiles>
    
    </settings>
    ```    
    使用 nexus + aliyun 仓库可以这样配置 settings.xml:
    ```xml
    <?xml version="1.0" encoding="UTF-8"?>
    
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    
        <localRepository>D:\maven\my_local_repository</localRepository>
    
        <pluginGroups>
        </pluginGroups>
    
        <proxies>
        </proxies>
    
        <profiles>
            <profile>
                <id>nexus</id>
                <repositories>
                    <repository>
                        <id>nexus</id>
                        <url>http://192.168.1.73:8081/repository/maven-public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </repository>
                </repositories>
                <pluginRepositories>
                    <pluginRepository>
                        <id>nexus</id>
                        <url>http://192.168.1.73:8081/repository/maven-public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </pluginRepository>
                </pluginRepositories>
            </profile>
            <profile>
                <id>aliyun</id>
                <repositories>
                    <repository>
                        <id>aliyun</id>
                        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </repository>
                </repositories>
                <pluginRepositories>
                    <pluginRepository>
                        <id>aliyun</id>
                        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </pluginRepository>
                </pluginRepositories>
            </profile>
        </profiles>
    
        <activeProfiles>
            <activeProfile>nexus</activeProfile>
        </activeProfiles>
    
    </settings>
    4.创建pom文件中tomcat插件坐标,和jdk1.8坐标模板
    IDEA35
    IDEA36
    IDEA37
    IDEA38
    IDEA39
    IDEA40

在pom文件中

<!--插件配置-->
<build>
    <plugins>
        <!-- 输入tomcat7后按回车键即可补全 -->
        <!-- 输入jdk1.8后按回车键即可补全 -->
    </plugins>
</build>

idea启动tomcat报端口冲突,比如JMX port的1099端口被占用,解决办法

cmd命令查看端口被哪个程序占用了 netstat -aon|findstr 1099

根据进程id杀死该进程 taskkill -f -pid 16648
IDEA41
IDEA42
IDEA43

idea控制台中文乱码解决办法

  • 打开idea安装目录,选择
    IDEA44

打开文件,末尾添加-Dfile.encoding=UTF-8
IDEA45

  • 打开IntelliJ IDEA>File>Setting>Editor>File Encodings,

将Global Encoding、Project Encoding、Default encodeing for properties files这三项都设置成UTF-8
IDEA46

  • 设置vm option参数为: -Dfile.encoding=utf-8

如果是web项目,在菜单栏找到run->Edit Configrations,设置 vm option为 -Dfile.encoding=utf-8
IDEA47

如果是普通java项目,在菜单栏找到run->Edit Configrations,设置 vm option为 -Dfile.encoding=utf-8
IDEA48

  • 重启IDEA

到这里,如果还是不行,可能是你无意中点了右下角或者那里的编码,改了一下,或者就被idea记录到 encodings.xml 中。

当你再次访问的时候,它就会用那种编码打开项目目录下的.idea的文件夹。解决办法是里面有个encodings.xml 的文件,然后除了UTF-8 的都删了。

通过mybatis-generator生成mapper.xml,但是主键id提示error

如下图, 运行起来没问题, 这是idea的一个小bug不用管
IDEA49

idea中删除项目

  1. 首先选中项目右键remove module
  2. 然后选中项目右键show in explorer打开项目所在文件夹,将其整个删除
  3. 最后点击菜单栏上的Fileclose project在idea开始界面将左边该项目的名称删除即可

插件

JRebel热部署插件

setting中找到插件市场下载,下载后需要激活,激活方法如下

在线生成GUID地址 https://www.guidgen.com/
IDEA50

使用方法: 需要勾选enable启用,并生成一个rebel.xml文件
IDEA51

Springboot环境下如何使用JRebel实现热部署

实际上Springboot已经提供了实现热部署的方法了。那就是你只需要引入依赖【springboot-devtools】就可以了。

那为什么我们还需要JRebel呢?

额外引入的依赖实际上生产环境并不需要,开发者引入后容易误提交到线上。

springboot-devtools方式的热部署在功能上有限制。如在方法内的修改可以实现热部署,但是新增的方法或者修改方法参数之后热部署是不生效的。

相对于JRebel,springboot-devtools方式热部署的速度可能有点慢

安装好JRebel之后工具栏会多两个图标。
IDEA52

安装完之后就可以使用下面两种方式来run了。之后的所有修改就都可以实现热部署啦。
IDEA53

使用JRebel插件注意点

由于JRebel是实时监控class文件的变化来实现热部署的,所以在idea环境下需要打开自动变异功能才能实现随时修改,随时生效。

在设置中打开自动编译. 如图,在设置中打开即可
IDEA54

2.打开运行时编译

按快捷键 Shift+Ctrl+Alt+/ ,选择 Registry
IDEA55

勾选如图所示
IDEA56

IDEA中使用external tools 中的javap -c查看类的字节码文件的时候 报错”class not found”异常 解决办法

IDEA57

先用javac 将class文件编译之后, 在使用javap -c class文件即可解决
IDEA58

IDEA中添加Java虚拟机运行参数
IDEA59
IDEA60

EasyCode插件

自动生成代码

lombok插件

IDEA中lombok不生效记得开启注解处理器
IDEA61

在IDEA中如何查看一个类的class文件反编译后的结果

方式1: 将一个XXX.class文件直接拉入idea工程中就能看见class文件反编译的结果

方式2: 在IDEA中将一个类(java文件)编译成class文件之后,直接点击这个class文件就能查看这个class文件反编译后的结果

第一步, 选中要编译的java类文件, 右键选择recompile命令, 编译该java文件, 底层调用的是javac命令
IDEA62

比如上面会将Student.java编译成Student.class

直接双击打开Student.class就能看到Student.class反编译的结果

Student.java文件的内容如下

public class Student
{
   private String name;
   private int age;
}
```    
使用IDEA打开Student.class文件显示的内容如下
```java
public class Student {
    private java.lang.String name;
    private int age;

    public Student() { /* compiled code */ }
}

可以看到, 如果我们不显示的写无参的构造方法, 编译器(javac)底层会默认为我们加上一个无参的构造方法

IDEA导入导出设置
IDEA63

stash和unstash

待补充, 出现stash之后项目结构出现问题的解决办法

IDEA Maven无法引入spring-boot-start-web => hibernate-validator =>org.openjfx:javafx.base:11.0.0-SNAPSHOP

今天手欠更新了下IDEA最新版,结果导致引入spring-boot-starter-web包爆红,org.openjfx:javafx.base jar下载失败
IDEA64

打开发现是这个org.openjfx:javafx.base子包没有引入,找到maven仓库删除该包,重下还是失败,网上页没找到解决方案,

最后对比了下发现以前的项目同版本spring-boot-starter-web下没有这个jfx依赖,于是怀疑是设置问题,打开设置,如图找到maven设置
IDEA65

注意到JRE被改成了11,现在用的是1.8,于是改回1.8,重新刷新导入
IDEA66

没有了org.openjfx:javafx.base:11.0.0-SNAPSHOP这个依赖,恢复正常!

IDEA自动生成序列化ID

默认情况下Intellij IDEA是关闭了继承了Serializable接口的类生成serialVersionUID的警告。

如果需要IDE提示生成serialVersionUID,那么需要做以下设置:

  1. setting->Inspections->Serialization issues,将serialzable class without “serialVersionUID”打上勾;
  2. 将光标放到类名上,按atl+enter键,就会提示生成serialVersionUID了
    IDEA67

点击类名,alt+enter
IDEA68
IDEA69

IDEA编译工程时出现Error:java: 无效的目标发行版: 1.8
IDEA70

见图,从上述可以看出工程用的jdk1.7,而idea编译时采用的是1.8版本(应该idea新版本内置的jre是1.8吧,默认编译采用1.8)

修改:如下图
IDEA71

IDEA中的HTTP Clinet工具的使用

点击test restful web service会在项目的Scratches目录下新创建一个rest-api.http的文件并打开,

里面有一个restful风格的GET请求示例, 我们可以在该文件中写自己的请求
IDEA72
IDEA73

点击open http requests collection会打开一个各种请求的示例汇总
IDEA74
IDEA75

点击上面的get requests会打开所有restful风格的各种get请求示例
IDEA76

点击上面的post requests会打开所有restful风格的各种post请求示例
IDEA77
IDEA78

点击上面的request with authorization会打开所有restful风格的各种带授权的请求示例
IDEA79

点击上面的get requests会打开所有restful风格的各种get请求示例

点击show http requests history 可以查看所有的请求历史记录
IDEA80

点击convert cURL to http request 可以将linux上curl方式的请求转换为http请求
IDEA81
IDEA82
IDEA83

注意: 旧版的IDEA打开restful clinet是在IDEA的左下发,新版IDEA废除了这种方式, 改为了像上面所述的那种在文件中添加请求的方式
IDEA84

IDEA中连接Linux的远程管理工具

IDEA85
IDEA86
IDEA87
IDEA88
IDEA89
IDEA90
IDEA91
IDEA92
IDEA93
IDEA94

连接成功,但发现乱码了, 点击设置SHH terminal 修改默认编码为UTF-8保存后重新打开一个terminal发现就没有乱码了
IDEA95

向linux服务器上传或下载文件, 首先需要配置一下上传的路径
IDEA96
IDEA97

按照下面步骤打开右侧的remote host菜单
IDEA98
IDEA99

点击打开, 直接在IDEA中左右拖拽即可实现文件的上传与下载
IDEA100

也可以直接在idea中copy然后粘贴到对应的linux目录下也行

同理: 可以copy服务器linux上的文件,粘贴到idea项目中
IDEA101
IDEA102

在IDEA中打开linux上的某个文件修改后保存(直接双击打开文件修改后点击上传即可)
IDEA103

IDEA Project Structure讲解

项目的左侧面板
IDEA104

项目设置->Project
IDEA105

Project Settings -> Modules
IDEA106

Sources面板
IDEA107

Paths面板
IDEA108

dependencies面板
IDEA109

Project Settings - > Libraries
IDEA110

Project Settings - > Facets
IDEA111

Project Settings -> artifacts
IDEA112

关于添加依赖包

可以在Libraries标签页中增加架包,也可以在对应的module里添加架包。前者可以将架包集中在一起并起个别名,便于自己对架包的管理。
IDEA113
IDEA114

IDEA中的Scratches and Consoles

Intellij IDEA 提供了两种临时的文件编辑环境,通过这两种临时的编辑环境,你可以写一些文本内容或者一些代码片段。
两种 Scratches 分别是:Scratch files 和 Scratch buffers。

这个功能是idea用来测试一小段代码的或者是某个语句某个api等,非常的方便;
Scratch files:Scratch files 有着完整的运行和 debug 功能等等,这些文件需要指定编程语言类型并且指定后缀。
Scratch buffers: Scratch buffers 仅仅是为了简单的编辑记录,所以不需要指定编程语言并且指定后缀,
默认文件类型是 .txt。需要注意的是,Scratch buffers 最多只能创建 5 个,超过 5 个将开始重用以前的,并且以前文件的内容会被重置。

创建 Scratches:
菜单(Main Menu)上选择 File | New | Scratch File
Ctrl + Shift + Alt + Insert 快捷键
在 Project 视窗中右键任何地方,然后选择 New | Scratch File/buffer
按下 Ctrl + Shift + A 快捷键,然后输入scratch file/buffer ,选择搜索到的新建选项,创建 Scratch File。

IDEA部署tomcat时Edit Configuration无artifact选项

IDEA115

解决办法:

  1. 打开Project Structure;
  2. 选择Aritfacts选项:点击+号,选择Web Application:Exploded->From Modules:选择你的项目即可:
    IDEA116
    IDEA117

再次进入Edit Configration->Deployment,点击+号,即可看到Artifact选项了
IDEA118

如何让idea的项目显示或不显示iml文件(显示或不显示其他文件的原理类似)

IDEA119

IDEA连接MySQL/Oracle/MongoDB操作数据库

注意:

  1. 密码选择永远记住(免得自己本地用的使用每次输入)
  2. 如果没有驱动, 联网直接点击下载即可, 下载完毕点击test connection
  3. 新创建的数据库连接默认是项目数据源, 点击左上角的按钮将其转成全局数据源

连接MySQL
IDEA120

IDEA连接mysql数据库报时区错误的解决办法
IDEA121

更改mysql的时区:

1.查询当前时区:

win+r 输入下面内容

mysql -uroot -proot123 //登录mysql

show variables like’%time_zone’; //查看mysql中设置的时区值

备注:配置环境变量:

在path中添加安装目录,到/bin

C:\Program Files\MySQL\MySQL Server 5.7\bin
IDEA122

打开my.ini,搜索[mysqld],在[mysql]节点下加上这一行
IDEA123

重启mysql服务 ,重新查询时区
IDEA124

修改成功,重新再idea中测试连接,成功!

连接Oracle
IDEA125

连接MongoDB
IDEA126
IDEA127

IDEA中mapper.xml文件去掉屎黄色背景

打开Settings。找到Editor -> Inspections的配置页面,

去掉SQL中No data sources configured(没有配置数据源) 选项 和 SQL dialect detection(SQL方言检测) 选项,点击 OK
IDEA128

继续打开Settings。找到Editor -> General的配置页面,选择Injected language fragment,去掉Background选项,点击OK
IDEA129

设置IDEA自动将mapper中写的SQL语句中的小写关键字转换成大写
IDEA130

IDEA连接Mysql数据库之后,编写Mapper.xml时不会自动提示表信息问题

IDEA131

IDEA中设置不区分大小写也能智能提示

去掉下图的勾选即可
IDEA132

IDEA设置启动后不直接进入项目而是打开最近打开的项目列表供选择

项目很多,想着切换不方便,希望IDE启动后,不进入上次使用的项目,而进入如图
IDEA133

Settings -> SystemSettings 去掉 Reopen last project on startup 的勾即可
IDEA134

IDEA使用springboot项目时调出run dashboard

1、springboot多个项目的时候会run dashboard的弹框,你点击同意展示就会出现
IDEA135

但是假如你关闭了还想要调出来怎么办呢?或者单个springboot项目根本就没有弹框提醒,

那么你可以这样做:来到项目.idea文件夹里面, 打开workspace.xml文件
IDEA136

然后找到<component name="RunDashboard">标签

然后增加

<option name="configurationTypes">  
     <set>  
       <option value="SpringBootApplicationConfigurationType" />  
     </set>  
</option>
```     
这样就能弹出run dashboard的框了,如果不能即时弹出,那么closed project后再重新打开即可

**IDEA运行项目报错:Command line is too long. Shorten command line for className or also for JUnit defaultconfiguration**

解决方法:

在该项目文件夹.idea/workspace.xml中找到
```xml
<component name="PropertiesComponent">
  ...
</component>

然后在其中添加:

<property name="dynamic.classpath" value="true" />

IDEA创建项目

创建一个基于severlet的web项目

IDEA137
IDEA138
IDEA139

点击ok后即生成了一个基于serverlet的web项目(点击Tomcat启动即可)
IDEA140

创建一个maven项目

IDEA141
IDEA142
IDEA143
IDEA144
IDEA145
IDEA146

上面创建完后还需要做一些修改

增加存放java源码目录
IDEA147

main目录下再创建一个 resources 目录,并标识为 Resources Root , 用于存放资源文件
IDEA148

部署运行
IDEA149

查看tomcat启动后,控制台打印信息,CATALINA_BASE与CATALINA_HOME
IDEA150

这里,主要关注CATALINA_BASE和CATALINA_HOME两个目录,这两目录有什么区别?

简单来说,

CATALINA_BASE是idea为当前项目建立的工作目录,我们部署的项目就放在这里(上面的设置介绍中,我有提到),

使用war exploded部署项目时,并没有把项目打包到tomcat的webapps目录下,我们的项目部署的位置就在这儿!!! 查看这个目录有什么?
IDEA151

看看conf目录里面有什么?竟然还有tomcat的配置文件server.xml
IDEA152

对比一下tomcat的安装目录:
IDEA153

看到这里就明白了一件事,idea为每个部署的项目新创建了一个tomcat实例,这就是一个工作目录,

这个实例与我们的tomcat相比,没有bin和lib库等信息,只有一些配置信息,仍然与原来tomcat共用bin和lib目录。

CATALINA_HOME则是tomcat的安装目录。

创建一个父子工程的maven项目

参见: maven.docx文档中的 创建Maven父子工程

IDEA对项目进行打包

对maven项目进行打包

IDEA154

对非maven项目进行打包

选中非maven的项目,打开项目结构视图
IDEA155

选择artifacts后点击+号,选择JAR–>empty
IDEA156

修改jar包的名字,和项目打成jar包后保存的路径
IDEA157

点击+号选择module output
IDEA158

选择要对那些module进行打包,可以多选
IDEA159

选择后点击ok,关闭choose module模态框后

再点击apply–>ok关闭project structure模态框
IDEA160

然后点击build—>build artifacts
IDEA161

最后选择要打包的项目后点击build即可
IDEA162

调整分配给IDEA更多的运行内存

如果电脑运行IDEA卡或经常闪退,则需要调整多分配给IDEA一些内存
IDEA163

IDEA安装与激活(针对ideaIU-2018.2.1版本)

相关资源可以到百度云下载: 我保存到百度云了
IDEA164
IDEA165
IDEA166
IDEA167

要习惯经常使用TODO清单

可以在项目中写TODO和内容,然后点击下方的这个TODO即可看到还未做完的待做事项
IDEA168

IDEA中删除module

第一步: 从项目中移除该module
IDEA169

第二步: 选中文件夹再按一次delete(这一步才真正将该module从硬盘中删除)
IDEA170

综上所述: 要删除一个module直接选中该module按两次delete即可

自动清除未导入的包

IDEA171

设置IDEA自动编译java文件, 不用每次ctrl+shift+9去手动编译

IDEA172

IDEA缓存和索引的清理

IntelliJ IDEA 首次加载项目的时候,都会创建索引,而创建索引的时间跟项目的 文件多少成正比。在 IntelliJ
IDEA 创建索引过程中即使你编辑了代码也是编译 不了、运行不起来的,所以还是安安静静等 IntelliJ IDEA 创
建索引完成。

IntelliJ IDEA 的缓存和索引主要是用来加快文件查询,从而加快各种查找、代码 提示等操作的速度,所以
IntelliJ IDEA 的索引的重要性再强调一次也不为过。

但是,IntelliJ IDEA 的索引和缓存并不是一直会良好地支持 IntelliJ IDEA 的,某些特殊条件下,IntelliJ IDEA 的
缓存和索引文件也是会损坏的,比如:断电、 蓝屏引起的强制关机,当你重新打开 IntelliJ IDEA,很可能
IntelliJ IDEA 会报各种莫名其妙错误,甚至项目打不开,IntelliJ IDEA 主题还原成默认状态。即使没有断电、
蓝屏,也会有莫名奇怪的问题的时候,也很有可能是 IntelliJ IDEA 缓存和索引出现了问题,这种情况还不少。
(比如我公司的电脑IDEA经常卡死和闪退有可能和缓存和索引损坏有关)

遇到此类问题也不用过多担心。我们可以清理缓存和索引。如下:

IDEA173
IDEA174

一般建议点击 Invalidate and Restart ,这样会比较干净。

通过上面方式清除缓存、索引本质就是去删除 C 盘下的 system 目录下的对应的文件而已,所以如果你不用上述方法也可以删除整个 system。

当 IntelliJ IDEA 再次启动项目的 时候会重新创建新的system 目录以及对应项目缓存和索引。
IDEA175

IDEA报Out of Memory

一、问题现象

IDEA一启动就弹出如下:
IDEA176

二、解决方案

1、点击图中的Continue按钮,然后快速的点开help按钮
IDEA177

2、点击help,找到如图按钮:
IDEA178

点开按钮以后,修改这三项的值,尽量调大一些,如图我的设置就够用了,重启IDEA即可
IDEA179

上一篇:
PL/SQL Developer
下一篇:
Maven