ZB-006-工具使用

maven

  • 提供一个生命周期流程
  • 每个插件可以把一小部分工作绑定到生命周期上
  • maven本身对这些事不做任何干涉,只定义生命周期
  • maven 每个阶段执行时都会把前面的每个阶段执行一遍
  • maven default lifecycle

参考资料

maven依赖的问题——传递性依赖

  • 你的项目依赖多个库 A、B、C
  • 而这个库A又依赖别的库 如C
  • 此时 多个地方依赖 C C的版本如果不一致就会有问题

maven显示依赖树

1
mvn dependency:tree

IDEA生产力翻倍的快捷键

  • 万能键 ALT + ENTER 任何情况都可以使用
  • 左侧项目结构面板右上角有个按钮 Scroll from Source 从源代码跳转
  • Search everywhere: 双击 shift
  • 查看定义:Declaration (command + B) (等价于按住command + 鼠标右键)
  • 查看⽂件:Navigate - File
  • ⾼级查找:Find in Path (顶栏Edit-Find-Find in Path) 几乎满足你查找的所有需求(command + shift + f)
  • 快速⽣成:Generate(ctrl + N)
  • 格式化:Reformat Code(alt + command + L)
  • 优化导⼊语句:Optimize imports(alt + command + O)
    • 比如你代码里开始用了 ArrayList,后来不用了,但是会被导入,这个时候用这个
  • 导航:Navigate - Back/Forward(alt + command + ⬅️ ➡️)
  • 所有的实现类:Implementation(command + 1)
  • 谁调⽤了这个⽅法:Call Hierarchy(command + 2)
  • ⽂件⼤纲:File Structure (command + 3)
    • 列出这个类的所有方法,成员
  • 下⼀处错误:Next Highlighted Error (command + 4)

  • ⾼级重命名:Rename (command + 5)

  • 调试器快捷键:F5/F6/F7/F8

推荐一个idea插件

  • Key Promoter X ,你点击ide的按钮的时候,能提示你快捷键

Git相关操作

  • 查找背锅侠:Annotate/Blame
  • 查看当前⽂件的历史版本
  • ⾼级筛选⽅式查找commit记录
  • 显示差异:show diff
  • Open in GitHub (选中你的代码 右键列表里)

底部工具栏 Version Control

  • Local Changes 等同于 git status 本地的变更还没有提交
  • Log 这个仓库里所有的日志

编程快捷键

1
2
3
4
5
6
7
8
9
psvm ==> public static void main(){}

sout ==> System.out.println()

soutv ==> System.out.println("xxx=" + xxx)

fori ==> for(int i = 0 ; i < ;i++)

fore ==> ...

寻找配对括号的小插件

  • Rainbow Brackets 彩虹括号
  • bytecode viewer 字节码查看器
  • Key Promoter X 快捷键提示插件
  • Stream java8流调试器,debug 的bar里最后一个按钮

调试器:没有解决不了的问题

为什么需要调试器

  • 理解程序执⾏的过程
  • 理解JVM的内部构造
  • ⾮常⽅便的检查在任意时间点JVM的内部状态

调试器

  • 单步跳过 ,Step over 执行一行,无论当前行的语句有多么的复杂。
  • 单步进⼊ , Step into 执行一个语句。进入这个方法的执行(最详细的方法执行)。
  • 单步跳出
  • 全速运⾏ Resume Program (F8)恢复程序,当前的程序全速跑到下一个断点
  • 断点(⾯板)
  • 条件断点 (所在行设置断点,点击右键弹出一个框 Condition 输入 i==5000 当i=5000的时候)
  • 跳转到源代码
  • Watch

JVM

  • 堆 所有对象都在堆上分配
  • 栈 (假设现在只有一个线程。每个线程有一个方法栈。方法的入口就是main方法。每次调用一个方法就会压栈,方法结束就会出栈)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class A {
public static void main(String[] args) {
a();
}

public static void a() {
System.out.println("a");
b();
}
public static void b() {
System.out.println("b");
c();
}
public static void c() {
int x = 1;
System.out.println("c");
}
}

函数一次一次调用形成的方法块叫什么

  • 栈帧
1
c执行结束 它里面的局部变量x会被销毁

执行表达式

1
2
3
打断点后,选中所在行右键选择Evaluate Expression

输入框里可写任意代码

鬼畜的用法,打破流程,不推荐用

1
return result; // 右键, View/Edit Text 修改为你要返回的内容

调试器的原理

  • 调试⾮项⽬源代码
  • 调试命令⾏程序

调试 mvn compile 过程的代码

  • 你想调试什么东西,首先要拿到这个东西的源代码
  • 比如调试 mvn compile,本质也是一个JVM
  • google 搜索maven compiler plugin github 把代码clone到本地
  • mvn 除了这个命令,还有一个调试版的命令 mvnDebug
  • 你可以这样运行 /Users/hjx/maven/apache-maven-3.6.3/bin/mvnDebug compile 这就是 debug模式运行 mvn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1。 找到你本地 mvn的 debug模式命令
> /Users/hjx/maven/apache-maven-3.6.2/bin/
mvnDebug compile

# 2。 debug 模式运行 mvn,监听在 8000端口
Preparing to execute Maven in debug mode
Listening for transport dt_socket at address: 8000

# 3。 此时在 IDEA里 编辑器右边顶部 的 add Configuration 里 “加号 + ”选择 Remote ,Port填入 8000,然后 ok
# 为什么是 Remote 这个过程不仅可以发生在你本地,还可以发生在你的生产服务器
# 然后在 mvn compile 源代码的 CompilerMojo 里 skipMain 这行 176

# 4。 然后 debug模式运行,你发现代码没有停在这里,不要开始怀疑人生, 要看你本地的 mvn版本 和代码的版本是否是一个版本

# 5。 源代码终端输入 git tag 找到跟你本地一致的版本号 如 3.6.2

# 6。 切换本地代码版本
git checkout maven-compiler-plugin-3.6.2

# 7。 在此 debug运行代码

此时你就可以调试 mvn compile 了