├── .github └── workflows │ └── build.yml ├── .gitignore ├── README.md ├── docs ├── .vuepress │ ├── config.ts │ ├── navbar.ts │ ├── public │ │ ├── favicon.ico │ │ └── logo.svg │ ├── sidebar.ts │ ├── styles │ │ └── index.scss │ └── theme.ts ├── README.md ├── plugins │ ├── README.md │ ├── assets │ │ ├── Codota2.png │ │ ├── Codota3.png │ │ ├── Presentation-Assistant.png │ │ ├── check-style.png │ │ ├── grep-console │ │ │ ├── grep-console.gif │ │ │ ├── grep-console2.png │ │ │ └── grep-console3.png │ │ ├── maver-helper.png │ │ ├── p3c │ │ │ ├── Alibaba-Java-Code-Guidelines1.png │ │ │ ├── Alibaba-Java-Code-Guidelines2.png │ │ │ ├── Alibaba-Java-Code-Guidelines3.png │ │ │ └── 阿里巴巴开发手册-线程池创建.png │ │ ├── power-mode │ │ │ └── Power-Mode-II.gif │ │ └── rainbow-brackets.png │ ├── camel-case │ │ ├── README.md │ │ └── assets │ │ │ ├── camel-case1.png │ │ │ ├── camel-case2.gif │ │ │ └── camel-case3.png │ ├── code-glance │ │ ├── README.md │ │ └── assets │ │ │ └── code-glance.png │ ├── code-statistic │ │ ├── README.md │ │ └── assets │ │ │ ├── Statistic1.png │ │ │ └── Statistic2.png │ ├── file-expander.md │ ├── git-commit-template │ │ ├── README.md │ │ └── assets │ │ │ ├── Git-Commit-Template1.png │ │ │ ├── Git-Commit-Template2.png │ │ │ └── Git-Commit-Template3.png │ ├── gson-format │ │ ├── README.md │ │ └── assets │ │ │ ├── RoboPOJOGenerator1.png │ │ │ ├── RoboPOJOGenerator2.png │ │ │ ├── gson-format1.png │ │ │ ├── gson-format2.png │ │ │ └── gson-format3.png │ ├── idea-features-trainer │ │ ├── README.md │ │ └── assets │ │ │ ├── IDE-Features-Trainer1.png │ │ │ └── IDE-Features-Trainer2.png │ ├── improve-code.md │ ├── interface-beautification.md │ ├── jclasslib │ │ ├── README.md │ │ └── assets │ │ │ ├── image-20201012143530226.png │ │ │ ├── image-20201012145127465.png │ │ │ ├── image-20201012145646086.png │ │ │ ├── image-20201012145900911.png │ │ │ ├── image-20201012150252106.png │ │ │ └── image-20201013084919965.png │ ├── maven-helper.md │ ├── others.md │ ├── rest │ │ ├── README.md │ │ └── assets │ │ │ ├── RestfulToolkit1.png │ │ │ ├── RestfulToolkit2.png │ │ │ ├── RestfulToolkit3.png │ │ │ └── RestfulToolkit4.png │ ├── save-actions │ │ ├── README.md │ │ └── assets │ │ │ └── save-actions2.gif │ ├── sequence-diagram.md │ ├── shortcut-key.md │ ├── themes.md │ └── translation │ │ ├── README.md │ │ └── assets │ │ ├── translation1.jpg │ │ └── translation2.png └── tips │ ├── README.md │ ├── assets │ ├── Alibaba-Java-Code-Guidelines.png │ ├── Alibaba-Java-Code-Guidelines2.png │ ├── exact │ │ ├── exact-field.gif │ │ ├── exact-interface.gif │ │ ├── exact-method.gif │ │ ├── exact-parameter.gif │ │ ├── exact-variable.gif │ │ └── extract-constant.gif │ ├── install-plugin-from-disk.png │ ├── refractor-help.png │ └── rename.gif │ ├── efficient-use-guide.md │ ├── plug-in-development-intro.md │ ├── refractor-intro.md │ └── source-code-reading-skills.md ├── package.json └── pnpm-lock.yaml /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Deploy docs 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | deploy-gh-pages: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | with: 15 | fetch-depth: 0 16 | 17 | - name: Install pnpm 18 | uses: pnpm/action-setup@v4 19 | with: 20 | run_install: true 21 | 22 | - name: Setup Node.js 23 | uses: actions/setup-node@v4 24 | with: 25 | node-version: 20 26 | cache: pnpm 27 | 28 | - name: Build Docs 29 | env: 30 | NODE_OPTIONS: --max_old_space_size=4096 31 | run: pnpm docs:build 32 | 33 | - name: Deploy 34 | uses: JamesIves/github-pages-deploy-action@v4 35 | with: 36 | branch: gh-pages 37 | folder: dist 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vuepress/.cache/ 2 | **/.vuepress/.cache/** 3 | **/.vuepress/.temp/** 4 | 5 | dist/** 6 | node_modules/** 7 | .DS_Store 8 | pnpm-lock.yaml 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IDEA 高效使用指南 2 | 3 |

4 | 5 | 6 | 7 |

8 |

9 | Github | 10 | Gitee 11 |

12 | 13 | 在线阅读:[https://idea.javaguide.cn/](https://idea.javaguide.cn/) 14 | 15 | IntelliJ IDEA 使用指南 | 必备插件推荐 | 插件开发入门 | 重构小技巧 | 源码阅读技巧 16 | 17 | ## 使用技巧 18 | 19 | - [IDEA 高效使用指南](./docs/tips/efficient-use-guide.md) 20 | - [IDEA 高效重构指南](./docs/tips/refractor-intro.md) 21 | - [IDEA 插件开发入门](./docs/tips/plug-in-development-intro.md) 22 | - [IDEA 源码阅读小技巧](./docs/tips/source-code-reading-skills.md) 23 | - [IDEA 高级调试技巧](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247516501&idx=1&sn=a8a99ec40a16b08daf73c14c36bdb768&chksm=cea1ce9ef9d64788e19c494979e37b99a963a83e3f7b4a18764a4d2ea942653500589d005f3b&token=787347680&lang=zh_CN#rd) 24 | 25 | ## 必备插件 26 | 27 | - [IDEA 美观主题插件总结](./docs/plugins/themes.md) 28 | - [IDEA 代码优化必备插件总结](./docs/plugins/improve-code.md) 29 | - [IDEA 界面美化必备插件总结](./docs/plugins/interface-beautification.md) 30 | - [Key Promoter X 和 Presentation Assistant:快捷键提示和展示](./docs/plugins/shortcut-key.md) 31 | - [Camel Case: 命名之间快速切换](./docs/plugins/camel-case/README.md) 32 | - [Maven Helper: 解决 Maven 依赖冲突问题](./docs/plugins/maven-helper.md) 33 | - [Save Actions: 优化文件保存](./docs/plugins/save-actions/README.md) 34 | - [Translation: 翻译](./docs/plugins/translation/README.md) 35 | - [CodeGlance: 代码微型地图](./docs/plugins/code-glance/README.md) 36 | - [Statistic: 项目代码统计](./docs/plugins/code-statistic/README.md) 37 | - [Git Commit Template: 提交代码格式规范](./docs/plugins/git-commit-template/README.md) 38 | - [GsonFormat: JSON 转对象](./docs/plugins/gson-format/README.md) 39 | - [IDE Features Trainer: IDEA 交互式教程](./docs/plugins/idea-features-trainer/README.md) 40 | - [jclasslib: 一款 IDEA 字节码查看神器](./docs/plugins/jclasslib/README.md) 41 | - [RestfulToolkit: RESTful Web 服务辅助开发工具](./docs/plugins/rest/README.md) 42 | - [SequenceDiagram: 一键可以生成时序图](./docs/plugins/sequence-diagram.md) 43 | - [File Expander:查看压缩包内容](./docs/plugins/file-expander.md) 44 | - [其他](./docs/plugins/others.md) 45 | -------------------------------------------------------------------------------- /docs/.vuepress/config.ts: -------------------------------------------------------------------------------- 1 | import { viteBundler } from "@vuepress/bundler-vite"; 2 | import { defineUserConfig } from "vuepress"; 3 | 4 | import theme from "./theme.js"; 5 | 6 | export default defineUserConfig({ 7 | dest: "./dist", 8 | 9 | title: "IDEA 高效使用指南", 10 | lang: "zh-CN", 11 | 12 | bundler: viteBundler(), 13 | 14 | theme, 15 | }); 16 | -------------------------------------------------------------------------------- /docs/.vuepress/navbar.ts: -------------------------------------------------------------------------------- 1 | import { navbar } from "vuepress-theme-hope"; 2 | 3 | export default navbar([ 4 | { text: "必备插件", icon: "plugin", link: "/plugins/" }, 5 | { text: "使用技巧", icon: "guide", link: "/tips/" }, 6 | ]); 7 | -------------------------------------------------------------------------------- /docs/.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /docs/.vuepress/public/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/sidebar.ts: -------------------------------------------------------------------------------- 1 | import { sidebar } from "vuepress-theme-hope"; 2 | 3 | export default sidebar({ 4 | "/tips/": [ 5 | "efficient-use-guide", 6 | "refractor-intro", 7 | "plug-in-development-intro", 8 | "source-code-reading-skills", 9 | ], 10 | "/plugins/": [ 11 | "themes", 12 | "improve-code", 13 | "interface-beautification", 14 | "shortcut-key", 15 | "camel-case/", 16 | "maven-helper", 17 | "save-actions/", 18 | "translation/", 19 | "code-glance/", 20 | "code-statistic/", 21 | "git-commit-template/", 22 | "gson-format/", 23 | "jclasslib/", 24 | "rest/", 25 | "sequence-diagram", 26 | "others", 27 | ], 28 | }); 29 | -------------------------------------------------------------------------------- /docs/.vuepress/styles/index.scss: -------------------------------------------------------------------------------- 1 | .vp-hero-info { 2 | width: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /docs/.vuepress/theme.ts: -------------------------------------------------------------------------------- 1 | import { hopeTheme } from "vuepress-theme-hope"; 2 | import navbar from "./navbar.js"; 3 | import sidebar from "./sidebar.js"; 4 | 5 | export default hopeTheme({ 6 | author: "Guide", 7 | logo: "/logo.svg", 8 | favicon: "/favicon.ico", 9 | hostname: "https://codingdocs.github.io", 10 | repo: "CodingDocs/awesome-idea", 11 | docsDir: "docs", 12 | iconAssets: "//at.alicdn.com/t/font_2410206_vuzkjonf4s9.css", 13 | pure: true, 14 | breadcrumb: false, 15 | navbar, 16 | sidebar, 17 | 18 | pageInfo: ["Author", "Category", "Tag", "Date", "Original", "Word"], 19 | 20 | blog: { 21 | intro: "https://javaguide.cn/about-the-author/", 22 | sidebarDisplay: "mobile", 23 | medias: { 24 | Zhihu: "https://www.zhihu.com/people/javaguide", 25 | Github: "https://github.com/Snailclimb", 26 | Gitee: "https://gitee.com/SnailClimb", 27 | }, 28 | }, 29 | 30 | footer: 31 | '主题: VuePress Theme Hope
鄂ICP备2020015769号-1', 32 | displayFooter: true, 33 | 34 | plugins: { 35 | blog: true, 36 | feed: { 37 | json: true, 38 | }, 39 | mdEnhance: { 40 | gfm: true, 41 | }, 42 | searchPro: true, 43 | }, 44 | }); 45 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | home: true 3 | icon: home 4 | title: 主页 5 | heroText: IDEA 高效使用指南 6 | heroImage: /logo.svg 7 | tagline: IntelliJ IDEA 使用指南 | 必备插件推荐 | 插件开发入门 | 重构小技巧 | 源码阅读技巧 8 | --- 9 | 10 | ## 使用技巧 11 | 12 | - [IDEA 高效使用指南](./tips/efficient-use-guide.md) 13 | - [IDEA 高效重构指南](./tips/refractor-intro.md) 14 | - [IDEA 插件开发入门](./tips/plug-in-development-intro.md) 15 | - [IDEA 源码阅读小技巧](./tips/source-code-reading-skills.md) 16 | 17 | ## 必备插件 18 | 19 | - [IDEA 美观主题插件总结](./plugins/themes.md) 20 | - [IDEA 代码优化必备插件总结](./plugins/improve-code.md) 21 | - [IDEA 界面美化必备插件总结](./plugins/interface-beautification.md) 22 | - [Key Promoter X 和 Presentation Assistant:快捷键提示和展示](./plugins/shortcut-key.md) 23 | - [Camel Case: 命名之间快速切换](./plugins/camel-case/README.md) 24 | - [Maven Helper: 解决 Maven 依赖冲突问题](./plugins/maven-helper.md) 25 | - [Save Actions: 优化文件保存](./plugins/save-actions/README.md) 26 | - [Translation: 翻译](./plugins/translation/README.md) 27 | - [CodeGlance: 代码微型地图](./plugins/code-glance/README.md) 28 | - [Statistic: 项目代码统计](./plugins/code-statistic/README.md) 29 | - [Git Commit Template: 提交代码格式规范](./plugins/git-commit-template/README.md) 30 | - [GsonFormat: JSON 转对象](./plugins/gson-format/README.md) 31 | - [IDE Features Trainer: IDEA 交互式教程](./plugins/idea-features-trainer/README.md) 32 | - [jclasslib: 一款 IDEA 字节码查看神器](./plugins/jclasslib/README.md) 33 | - [RestfulToolkit: RESTful Web 服务辅助开发工具](./plugins/rest/README.md) 34 | - [SequenceDiagram: 一键可以生成时序图](./plugins/sequence-diagram.md) 35 | - [File Expander:查看压缩包内容](./plugins/file-expander.md) 36 | - [其他](./plugins/others.md) 37 | -------------------------------------------------------------------------------- /docs/plugins/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 必备插件 3 | icon: plugin 4 | --- 5 | 6 | ## 目录 7 | 8 | - [IDEA 美观主题插件总结](./themes.md) 9 | - [IDEA 代码优化必备插件总结](./improve-code.md) 10 | - [IDEA 界面美化必备插件总结](./interface-beautification.md) 11 | - [Key Promoter X 和 Presentation Assistant:快捷键提示和展示](./shortcut-key.md) 12 | - [Camel Case: 命名之间快速切换](./camel-case/README.md) 13 | - [Maven Helper: 解决 Maven 依赖冲突问题](./maven-helper.md) 14 | - [Save Actions: 优化文件保存](./save-actions/README.md) 15 | - [Translation: 翻译](./translation/README.md) 16 | - [CodeGlance: 代码微型地图](./code-glance/README.md) 17 | - [Statistic: 项目代码统计](./code-statistic/README.md) 18 | - [Git Commit Template: 提交代码格式规范](./git-commit-template/README.md) 19 | - [GsonFormat: JSON 转对象](./gson-format/README.md) 20 | - [IDE Features Trainer: IDEA 交互式教程](./idea-features-trainer/README.md) 21 | - [jclasslib: 一款 IDEA 字节码查看神器](./jclasslib/README.md) 22 | - [RestfulToolkit: RESTful Web 服务辅助开发工具](./rest/README.md) 23 | - [SequenceDiagram: 一键可以生成时序图](./sequence-diagram.md) 24 | - [File Expander:查看压缩包内容](./file-expander.md) 25 | - [其他](./others.md) 26 | -------------------------------------------------------------------------------- /docs/plugins/assets/Codota2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/Codota2.png -------------------------------------------------------------------------------- /docs/plugins/assets/Codota3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/Codota3.png -------------------------------------------------------------------------------- /docs/plugins/assets/Presentation-Assistant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/Presentation-Assistant.png -------------------------------------------------------------------------------- /docs/plugins/assets/check-style.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/check-style.png -------------------------------------------------------------------------------- /docs/plugins/assets/grep-console/grep-console.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/grep-console/grep-console.gif -------------------------------------------------------------------------------- /docs/plugins/assets/grep-console/grep-console2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/grep-console/grep-console2.png -------------------------------------------------------------------------------- /docs/plugins/assets/grep-console/grep-console3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/grep-console/grep-console3.png -------------------------------------------------------------------------------- /docs/plugins/assets/maver-helper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/maver-helper.png -------------------------------------------------------------------------------- /docs/plugins/assets/p3c/Alibaba-Java-Code-Guidelines1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/p3c/Alibaba-Java-Code-Guidelines1.png -------------------------------------------------------------------------------- /docs/plugins/assets/p3c/Alibaba-Java-Code-Guidelines2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/p3c/Alibaba-Java-Code-Guidelines2.png -------------------------------------------------------------------------------- /docs/plugins/assets/p3c/Alibaba-Java-Code-Guidelines3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/p3c/Alibaba-Java-Code-Guidelines3.png -------------------------------------------------------------------------------- /docs/plugins/assets/p3c/阿里巴巴开发手册-线程池创建.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/p3c/阿里巴巴开发手册-线程池创建.png -------------------------------------------------------------------------------- /docs/plugins/assets/power-mode/Power-Mode-II.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/power-mode/Power-Mode-II.gif -------------------------------------------------------------------------------- /docs/plugins/assets/rainbow-brackets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/assets/rainbow-brackets.png -------------------------------------------------------------------------------- /docs/plugins/camel-case/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | Camel Case: 命名之间快速切换 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | --- 9 | 10 | 非常有用! 11 | 12 | 这个插件可以实现包含 6 种常见命名格式之间的切换。并且,你还可以对转换格式进行相关配置(转换格式) _Preferences / Settings | Camel Case_ 。 13 | 14 | ![camel-case1](./assets/camel-case1.png) 15 | 16 | 有了这个插件之后,点击你想要修改的变量或者方法名使用快捷键 `shift + option + u` (mac) / `shift + alt + u` (win) 即可实现在多种命名格式之间切换。 17 | 18 | ![camel-case2](./assets/camel-case2.gif) 19 | 20 | 如果你突然忘记快捷键的话,可以直接在 IDEA 的菜单栏的 Edit 部分找到。 21 | 22 | ![camel-case3](./assets/camel-case3.png) 23 | 24 | 使用这个插件对开发效率提升高吗?拿我之前项目组的情况举个例子: 25 | 26 | 我之前有一个项目组的测试名字是驼峰这种形式: 27 | 28 | `ShouldReturnTicketWhenRobotSaveBagGiven1LockersWith2FreeSpace` 29 | 30 | 但是,使用驼峰形式命名测试方法的名字不太明显,一般建议用下划线 `_` 的形式: 31 | 32 | `should_return_ticket_when_robot_save_bag_given_1_lockers_with_2_free_space` 33 | 34 | 如果我们不用这个插件,而是手动去一个一个改的话,工作量想必会很大,而且正确率也会因为手工的原因降低。 35 | -------------------------------------------------------------------------------- /docs/plugins/camel-case/assets/camel-case1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/camel-case/assets/camel-case1.png -------------------------------------------------------------------------------- /docs/plugins/camel-case/assets/camel-case2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/camel-case/assets/camel-case2.gif -------------------------------------------------------------------------------- /docs/plugins/camel-case/assets/camel-case3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/camel-case/assets/camel-case3.png -------------------------------------------------------------------------------- /docs/plugins/code-glance/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | CodeGlance: 代码微型地图 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | --- 9 | 10 | CodeGlance 提供一个代码的微型地图,当你的类比较多的时候可以帮忙你快速定位到要去的位置。这个插件在我们日常做普通开发的时候用处不大,不过,在你阅读源码的时候还是很有用的,如下图所示: 11 | 12 | ![code-glance](./assets/code-glance.png) 13 | -------------------------------------------------------------------------------- /docs/plugins/code-glance/assets/code-glance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/code-glance/assets/code-glance.png -------------------------------------------------------------------------------- /docs/plugins/code-statistic/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | Statistic: 项目代码统计 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | --- 9 | 10 | 编程是一个很奇妙的事情,大部分的我们把大部分时间实际都花在了复制粘贴,而后修改代码上面。 11 | 12 | 很多时候,我们并不关注代码质量,只要功能能实现,我才不管一个类的代码有多长、一个方法的代码有多长。 13 | 14 | 因此,我们经常会碰到让自己想要骂街的项目,不过,说真的,你自己写的代码也有极大可能被后者 DISS。 15 | 16 | 为了快速分析项目情况,判断这个项目是不是一个“垃圾”项目,有一个方法挺简单的。 17 | 18 | 那就是**对代码的总行数、单个文件的代码行数、注释行数等信息进行统计。** 19 | 20 | **怎么统计呢?** 21 | 22 | 首先想到的是 Excel 。不过,显然太麻烦了。 23 | 24 | **有没有专门用于代码统计的工具呢?** 25 | 26 | 基于 Perl 语言开发的 cloc(count lines of code)或许可以满足你的要求。 27 | 28 | **有没有什么更简单的办法呢?** 29 | 30 | 如果你使用的是 IDEA 进行开发的话,推荐你可以使用一下 **Statistic** 这个插件。 31 | 32 | 有了这个插件之后你可以非常直观地看到你的项目中所有类型的文件的信息比如数量、大小等等,可以帮助你更好地了解你们的项目。 33 | 34 | ![Statistic1](./assets/Statistic1.png) 35 | 36 | 你还可以使用它看所有类的总行数、有效代码行数、注释行数、以及有效代码比重等等这些东西。 37 | 38 | ![Statistic2](./assets/Statistic2.png) 39 | 40 | 如果,你担心插件过多影响 IDEA 速度的话,可以只在有代码统计需求的时候开启这个插件,其他时间禁用它就完事了! 41 | -------------------------------------------------------------------------------- /docs/plugins/code-statistic/assets/Statistic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/code-statistic/assets/Statistic1.png -------------------------------------------------------------------------------- /docs/plugins/code-statistic/assets/Statistic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/code-statistic/assets/Statistic2.png -------------------------------------------------------------------------------- /docs/plugins/file-expander.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: File Expander:一键可以生成时序图 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 插件 7 | --- 8 | 9 | File Expander 这个插件可以让你在 IDEA 中打开压缩文件,支持的文件格式有: 10 | 11 | - zip(.zip .jar .war .epc 等等) 12 | - .gz 13 | - .tar 14 | - .tar.gz and .tgz 15 | - .7z 16 | - 嵌套的归档文件 17 | 18 | 实际效果如下图所示: 19 | 20 | ![打开压缩文件](https://oss.javaguide.cn/idea/file-expander-archive-based-file.png) 21 | 22 | 并且,这个插件还支持反编译 jar。 23 | 24 | ![反编译 jar](https://oss.javaguide.cn/idea/file-expander-decompile.png) -------------------------------------------------------------------------------- /docs/plugins/git-commit-template/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | Git Commit Template: 提交代码格式规范 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | --- 9 | 10 | 没有安装这个插件之前,我们使用 IDEA 提供的 Commit 功能提交代码是下面这样的: 11 | 12 | ![Git-Commit-Template1](./assets/Git-Commit-Template1.png) 13 | 14 | 使用了这个插件之后是下面这样的,提供了一个 commit 信息模板的输入框: 15 | 16 | ![Git-Commit-Template2](./assets/Git-Commit-Template2.png) 17 | 18 | 完成之后的效果是这样的: 19 | 20 | ![Git-Commit-Template3](./assets/Git-Commit-Template3.png) 21 | -------------------------------------------------------------------------------- /docs/plugins/git-commit-template/assets/Git-Commit-Template1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/git-commit-template/assets/Git-Commit-Template1.png -------------------------------------------------------------------------------- /docs/plugins/git-commit-template/assets/Git-Commit-Template2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/git-commit-template/assets/Git-Commit-Template2.png -------------------------------------------------------------------------------- /docs/plugins/git-commit-template/assets/Git-Commit-Template3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/git-commit-template/assets/Git-Commit-Template3.png -------------------------------------------------------------------------------- /docs/plugins/gson-format/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | GsonFormat: JSON转对象 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | --- 9 | 10 | ## GsonFormat 11 | 12 | GsonFormat 这个插件可以根据 Gson 库使用的要求,将 JSONObject 格式的 String 解析成实体类。 13 | 14 | ::: note 15 | 16 | 2021.x 版本以上的 IDEA 可以使用 GsonFormatPlus。 17 | 18 | ::: 19 | 20 | 使用起来非常简单,我们新建一个类,然后在类中使用快捷键 `option + s` (Mac) 或 `alt + s` (win) 调出操作窗口(**必须在类中使用快捷键才有效**),如下图所示。 21 | 22 | ![gson-format2](./assets/gson-format2.png) 23 | 24 | ![gson-format3](./assets/gson-format3.png) 25 | 26 | 这个插件是一个国人几年前写的,不过已经很久没有更新了,可能会因为 IDEA 的版本问题有一些小 Bug。而且,这个插件无法将 JSON 转换为 Kotlin(这个其实无关痛痒,IDEA 自带的就有 Java 转 Kotlin 的功能)。 27 | 28 | ![gson-format1](./assets/gson-format1.png) 29 | 30 | ## RoboPOJOGenerator 31 | 32 | 另外一个与之相似的插件是 **RoboPOJOGenerator** ,这个插件的更新频率比较快。 33 | 34 | `File-> new -> Generate POJO from JSON` 35 | 36 | ![RoboPOJOGenerator1](./assets/RoboPOJOGenerator1.png) 37 | 38 | 然后将 JSON 格式的数据粘贴进去之后,配置相关属性之后选择“_Generate_” 39 | 40 | ![RoboPOJOGenerator2](./assets/RoboPOJOGenerator2.png) 41 | -------------------------------------------------------------------------------- /docs/plugins/gson-format/assets/RoboPOJOGenerator1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/gson-format/assets/RoboPOJOGenerator1.png -------------------------------------------------------------------------------- /docs/plugins/gson-format/assets/RoboPOJOGenerator2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/gson-format/assets/RoboPOJOGenerator2.png -------------------------------------------------------------------------------- /docs/plugins/gson-format/assets/gson-format1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/gson-format/assets/gson-format1.png -------------------------------------------------------------------------------- /docs/plugins/gson-format/assets/gson-format2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/gson-format/assets/gson-format2.png -------------------------------------------------------------------------------- /docs/plugins/gson-format/assets/gson-format3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/gson-format/assets/gson-format3.png -------------------------------------------------------------------------------- /docs/plugins/idea-features-trainer/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | IDE Features Trainer: IDEA 交互式教程 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | --- 9 | 10 | 有了这个插件之后,你可以**在 IDE 中以交互方式学习 IDEA 最常用的快捷方式和最基本功能**。 11 | 12 | ::: tip 强烈推荐 13 | 14 | 此插件非常方便!强烈建议大家安装一个,尤其是刚开始使用 IDEA 的朋友。 15 | 16 | ::: 17 | 18 | 当我们安装了这个插件之后,你会发现我们的 IDEA 编辑器的右边多了一个“**Learn**”的选项,我们点击这个选项就可以看到如下界面。 19 | 20 | ![IDE-Features-Trainer1](./assets/IDE-Features-Trainer1.png) 21 | 22 | 我们选择“Editor Basics”进行,然后就可以看到如下界面,这样你就可以按照指示来练习了!非常不错! 23 | 24 | ![IDE-Features-Trainer2](./assets/IDE-Features-Trainer2.png) 25 | -------------------------------------------------------------------------------- /docs/plugins/idea-features-trainer/assets/IDE-Features-Trainer1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/idea-features-trainer/assets/IDE-Features-Trainer1.png -------------------------------------------------------------------------------- /docs/plugins/idea-features-trainer/assets/IDE-Features-Trainer2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/idea-features-trainer/assets/IDE-Features-Trainer2.png -------------------------------------------------------------------------------- /docs/plugins/improve-code.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IDEA 代码优化必备插件总结 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 插件 7 | - 代码优化 8 | --- 9 | 10 | ## Lombok: 帮你简化代码 11 | 12 | 之前没有推荐这个插件的原因是觉得已经是人手必备的了。如果你要使用 Lombok 的话,不光是要安装这个插件,你的项目也要引入相关的依赖。 13 | 14 | ```xml 15 | 16 | org.projectlombok 17 | lombok 18 | true 19 | 20 | ``` 21 | 22 | 使用 Lombok 能够帮助我们少写很多代码比如 Getter/Setter、Constructor 等等。 23 | 24 | 关于 Lombok 的使用,可以查看 [《十分钟搞懂 Java 效率工具 Lombok 使用与原理》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485385&idx=2&sn=a7c3fb4485ffd8c019e5541e9b1580cd&chksm=cea24802f9d5c1144eee0da52cfc0cc5e8ee3590990de3bb642df4d4b2a8cd07f12dd54947b9&token=1667678311&lang=zh_CN#rd)。 25 | 26 | ## Codota: 代码智能提示 27 | 28 | ::: note 29 | 30 | 目前 Codota 已经更名为 **Tabnine** 。 31 | 32 | ::: 33 | 34 | 我一直在用的一个插件,可以说非常好用了(_我身边的很多大佬平时写代码也会用这个插件_)。 35 | 36 | Codota 这个插件用于智能代码补全,它基于数百万 Java 程序,能够根据程序上下文提示补全代码。相比于 IDEA 自带的智能提示来说,Codota 的提示更加全面一些。 37 | 38 | 除了代码补全之外,Codota 还支持代码智能搜索,直接选中对应的类或者方法即可搜索相关的代码示例。 39 | 40 | ![Codota2](./assets/Codota2.png) 41 | 42 | 如果你觉得 IDEA 插件安装的太多比较卡顿的话,不用担心!Codota 插件还有一个对应的 [在线网站](https://www.codota.com/code),在这个网站上你可以根据代码关键字搜索相关代码示例,非常不错! 43 | 44 | 我在工作中经常会用到,说实话确实给我带来了很大便利,比如我们搜索 `Files.readAllLines` 相关的代码,搜索出来的结果如下图所示: 45 | 46 | ![Codota3](./assets/Codota3.png) 47 | 48 | 另外,Codota 插件的基础功能都是免费的。你的代码也不会被泄露,这点你不用担心。 49 | 50 | 类似的插件还有阿里云智能编码插件 **Cosy**(Alibaba Cloud AI Coding Assistant) ,关于 Cosy 的详细介绍,可以看一下我写的 [阿里云 Java 智能编码插件 Cosy 诞生!](https://zhuanlan.zhihu.com/p/464874603) 这篇文章。 51 | 52 | ## Alibaba Java Code Guidelines: 阿里巴巴 Java 代码规范 53 | 54 | 阿里巴巴 Java 代码规范,对应的 Github 地址为: 。非常推荐安装! 55 | 56 | 安装完成之后建议将与语言替换成中文,提示更加友好一点。 57 | 58 | ![Alibaba-Java-Code-Guidelines2](./assets/p3c/Alibaba-Java-Code-Guidelines2.png) 59 | 60 | 根据官方描述: 61 | 62 | > 目前这个插件实现了开发手册中的的 53 条规则,大部分基于 PMD 实现,其中有 4 条规则基于 IDEA 实现,并且基于 IDEA [Inspection](https://www.jetbrains.com/help/idea/code-inspection.html)实现了实时检测功能。部分规则实现了 Quick Fix 功能,对于可以提供 Quick Fix 但没有提供的,我们会尽快实现,也欢迎有兴趣的同学加入进来一起努力。 目前插件检测有两种模式: 实时检测、手动触发。 63 | 64 | 上述提到的开发手册也就是在 Java 开发领域赫赫有名的《阿里巴巴 Java 开发手册》。 65 | 66 | ### 手动配置检测规则 67 | 68 | 你还可以手动配置相关 inspection 规则: 69 | 70 | ![Alibaba-Java-Code-Guidelines3](./assets/p3c/Alibaba-Java-Code-Guidelines3.png) 71 | 72 | ### 使用效果 73 | 74 | 这个插件会实时检测出我们的代码不匹配它的规则的地方,并且会给出修改建议。比如我们按照下面的方式去创建线程池的话,这个插件就会帮我们检测出来,如下图所示。 75 | 76 | ![Alibaba-Java-Code-Guidelines1](./assets/p3c/Alibaba-Java-Code-Guidelines1.png) 77 | 78 | 这个可以对应上 《阿里巴巴 Java 开发手册》 这本书关于创建线程池的方式说明。 79 | 80 | ![](./assets/p3c/阿里巴巴开发手册-线程池创建.png) 81 | 82 | ## CheckStyle: Java 代码格式规范 83 | 84 | ### 为何需要 CheckStyle 插件? 85 | 86 | **CheckStyle 几乎是 Java 项目开发必备的一个插件了,它会帮助我们检查 Java 代码的格式是否有问题比如变量命名格式是否有问题、某一行代码的长度是否过长等等。** 87 | 88 | 在项目上,**通过项目开发人员自我约束来规范代码格式必然是不靠谱的!** 因此,我们非常需要这样一款工具来帮助我们规范代码格式。 89 | 90 | 如果你看过我写的轮子的话,可以发现我为每一个项目都集成了 CheckStyle,并且设置了 **Git Commit 钩子**,保证在提交代码之前代码格式没有问题。 91 | 92 | ::: info Guide 哥造的轮子 (代码简洁,结构清晰,欢迎学习,欢迎一起完善) 93 | 94 | 1. [guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework): A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程) 95 | 1. [jsoncat](https://github.com/Snailclimb/jsoncat): 仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架 96 | 97 | ::: info **Git 钩子** 98 | 99 | Git 能在特定的重要动作比如 commit、push 发生时触发自定义脚本。 钩子都被存储在 Git 目录下的 `hooks` 子目录中。 也即绝大部分项目中的 `.git/hooks` 。 100 | 101 | ::: 102 | 103 | ### 如何在 Maven/Gradle 项目中集成 Checksytle? 104 | 105 | 一般情况下,我们都是将其集成在项目中,并设置相应的 Git 钩子。网上有相应的介绍文章,这里就不多提了。 106 | 107 | 如果你觉得网上的文章不直观的话,可以参考我上面提到了两个轮子: 108 | 109 | 1. [guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework): Maven 项目集成 Checksytle。 110 | 2. [jsoncat](https://github.com/Snailclimb/jsoncat): Gradle 项目集成 Checksytle。 111 | 112 | 如果你在项目中集成了 Checksytle 的话,每次检测会生成一个 HTML 格式的文件告诉你哪里的代码格式不对,这样看着非常不直观。通过 Checksytle 插件的话可以非常直观的将项目中存在格式问题的地方显示出来。 113 | 114 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/IDEA%E6%8F%92%E4%BB%B6/image-20201013135044410.png) 115 | 116 | 如果你只是自己在本地使用,并不想在项目中集成 Checksytle 的话也可以,只需要下载一个 Checksytle 插件就足够了。 117 | 118 | ### 如何安装? 119 | 120 | 我们直接在 IDEA 的插件市场即可找到这个插件。我这里已经安装好了。 121 | 122 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/IDEA%E6%8F%92%E4%BB%B6/image-20201013103610557.png) 123 | 124 | 安装插件之后重启 IDEA,你会发现就可以在底部菜单栏找到 CheckStyle 了。 125 | 126 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/IDEA%E6%8F%92%E4%BB%B6/image-20201013134644991.png) 127 | 128 | ### 如何自定义检测规则? 129 | 130 | 如果你需要自定义代码格式检测规则的话,可以按照如下方式进行配置(你可以导入用于自定义检测规则的`CheckStyle.xml`文件)。 131 | 132 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/IDEA%E6%8F%92%E4%BB%B6/setting-check-style.png) 133 | 134 | ### 使用效果 135 | 136 | 配置完成之后,按照如下方式使用这个插件! 137 | 138 | ![run-check-style](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/IDEA%E6%8F%92%E4%BB%B6/run-check-style.png) 139 | 140 | 可以非常清晰的看到: CheckStyle 插件已经根据我们自定义的规则将项目中的代码存在格式问题的地方都检测了出来。 141 | 142 | ## SonarLint:帮你优化代码 143 | 144 | SonarLint 帮助你发现代码的错误和漏洞,就像是代码拼写检查器一样,SonarLint 可以实时显示出代码的问题,并提供清晰的修复指导,以便你提交代码之前就可以解决它们。 145 | 146 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-2@main/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/image-20201019222817359.png) 147 | 148 | 并且,很多项目都集成了 SonarQube,SonarLint 可以很方便地与 SonarQube 集成。 149 | -------------------------------------------------------------------------------- /docs/plugins/interface-beautification.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IDEA 界面美化必备插件总结 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 插件 7 | - 代码优化 8 | --- 9 | 10 | ## Extra ToolWindow Colorful Icons:工具窗口图标 11 | 12 | 非常提升视觉体验的一款插件。该插件基于 ToolWindow Colorful Icons 插件,并添加了一些图标。 13 | 14 | 使用前: 15 | 16 | 17 | 18 | 使用后: 19 | 20 | 21 | 22 | 并且,你可以在设置中选择是否激活特定的图标。 23 | 24 | ![](https://oss.javaguide.cn/idea/extra-toolwindow-colorful-icons-settings.png) 25 | 26 | ## Grep Console: 控制台输出处理 27 | 28 | 可以说是必备的一个 IDEA 插件,非常实用! 29 | 30 | 这个插件主要的功能有两个: 31 | 32 | **1. 自定义设置控制台输出颜色** 33 | 34 | 我们可以在设置中进行相关的配置: 35 | 36 | ![grep-console2](./assets/grep-console/grep-console2.png) 37 | 38 | 配置完成之后的 log warn 的效果对比图如下: 39 | 40 | ![grep-console3](./assets/grep-console/grep-console3.png) 41 | 42 | **2. 过滤控制台输出** 43 | 44 | ![grep-console](./assets/grep-console/grep-console.gif) 45 | 46 | ## Rainbow Brackets: 彩虹括号 47 | 48 | 使用各种鲜明的颜色来展示你的括号,效果图如下。可以看出代码层级变得更加清晰了,可以说非常实用友好了! 49 | 50 | ![rainbow-brackets](./assets/rainbow-brackets.png) 51 | 52 | ## Background Image Plus: 背景图片 53 | 54 | 我这里推荐使用国人 Jack Chu 基于 Background Image Plus 开发的最新版本,适用于 2021.x 版本的 IDEA。 55 | 56 | 前面几个下载量比较高的,目前都还未支持 2021.x 版本的 IDEA。 57 | 58 | ![Background Image Plus](https://oss.javaguide.cn/idea/image-20211010174138279.png) 59 | 60 | 通过这个插件,你可以将 IDEA 背景设置为指定的图片,支持随机背景。 61 | 62 | 效果图如下: 63 | 64 | ![Background Image Plus 设置背景效果图](https://oss.javaguide.cn/idea/image-20211010173730828.png) 65 | 66 | 如果你想要设置随机背景的话,可以通过 IDEA 设置页 **Settings** -> **Appearance & Behaviour** -> **Background Image Plus** 自定义设置项,随机显示目录下的图片为背景图。 67 | 68 | ## Power Mode II: 代码特效 69 | 70 | 使用了这个插件之后,写代码会自带特效,适用于 2021.x 版本的 IDEA。 2021.x 版本之前,可以使用 **activate-power-mode** 。 71 | 72 | ![Power Mode II 效果图](./assets/power-mode/Power-Mode-II.gif) 73 | 74 | 你可以通过 IDEA 设置页 **Settings** -> **Appearance & Behaviour** -> **Power Mode II** 自定义设置项。 75 | 76 | ![Power Mode II](https://oss.javaguide.cn/idea/image-20211010175304108.png) 77 | 78 | 这个比较适合用来装逼,实际作用不大,甚是影响编码体验。 79 | 80 | ## Nyan Progress Bar: 进度条美化 81 | 82 | 可以让你拥有更加漂亮的进度条。 83 | 84 | ![](https://oss.javaguide.cn/idea/image-20211010175434133.png) 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /docs/plugins/jclasslib/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | jclasslib: 一款IDEA字节码查看神器 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | - 字节码 9 | --- 10 | 11 | 由于后面要分享的一篇文章中用到了这篇文章要推荐的一个插件,所以这里分享一下。非常实用!你会爱上它的! 12 | 13 | ![jclasslib1](./assets/image-20201013084919965.png) 14 | 15 | **开始推荐 IDEA 字节码查看神器之前,先来回顾一下 Java 字节码是啥。** 16 | 17 | ## 何为 Java 字节码? 18 | 19 | Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。 20 | 21 | ::: info 字节码 22 | 23 | 在 Java 中,JVM 可以理解的代码就叫做`字节码`(即扩展名为 `.class` 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。 24 | 25 | ::: 26 | 27 | **Java 程序从源代码到运行的过程如下图所示**: 28 | 29 | ![Java程序转变为机器代码的过程](https://oss.javaguide.cn/github/javaguide/java/basis/java-code-to-machine-code.png) 30 | 31 | ## 为什么要查看 Java 字节码? 32 | 33 | 我们在平时学习的时候,经常需要查看某个 java 类的字节码文件。查看字节码文件更容易让我们搞懂 java 代码背后的原理比如搞懂 java 中的各种语法糖的本质。 34 | 35 | ## 如何查看 Java 字节码? 36 | 37 | 如果我们通过命令行来查看某个 class 的字节码文件的话,可以直接通过 `javap` 命令,不过这种方式太原始了,效率十分低,并且看起来不直观。 38 | 39 | 下面介绍两种使用 IDEA 查看类对应字节码文件的方式(_`javap`这种方式就不提了_)。 40 | 41 | 我们以这段代码作为案例: 42 | 43 | ```java 44 | public class Main { 45 | public static void main(String[] args) { 46 | Integer i = null; 47 | Boolean flag = false; 48 | System.out.println(flag ? 0: i); 49 | } 50 | } 51 | ``` 52 | 53 | 上面这段代码由于使用三目运算符不当导致诡异了 NPE 异常。为了搞清楚事情的原因,我们来看其对应的字节码。 54 | 55 | ### 使用 IDEA 自带功能 56 | 57 | 我们点击 `View -> Show Bytecode` 即可通过 IDEA 查看某个类对应的字节码文件。 58 | 59 | ::: warning 60 | 61 | 查看某个类对应的字节码文件之前需确保它已经被编译过。 62 | 63 | ::: 64 | 65 | ![使用 IDEA 自带功能查看 Java 字节码](./assets/image-20201012143530226.png) 66 | 67 | 稍等几秒钟之后,你就可以直观到看到对应的类的字节码内容了。 68 | 69 | ![jclasslib2](./assets/image-20201012145127465.png) 70 | 71 | 从字节码中可以看出,我圈出来的位置发生了 **拆箱操作** 。 72 | 73 | > - **装箱**: 将基本类型用它们对应的引用类型包装起来; 74 | > - **拆箱**: 将包装类型转换为基本数据类型; 75 | 76 | 详细解释下就是: `flag ? 0: i` 这行代码中,`0` 是基本数据类型 int,返回数据的时候 `i` 会被强制拆箱成 int 类型,由于 `i` 的值是 `null`,因此就抛出了 NPE 异常。 77 | 78 | ```java 79 | Integer i = null; 80 | Boolean flag = false; 81 | System.out.println(flag ? 0: i); 82 | ``` 83 | 84 | 如果,我们把代码中 `flag` 变量的值修改为 `true` 的话,就不会存在 NPE 问题了,因为会直接返回 `0`,不会进行拆箱操作。 85 | 86 | ### 使用 IDEA 插件 jclasslib(推荐) 87 | 88 | 相比于 IDEA 自带的查看类字节的功能,我更推荐 `jclasslib` 这个插件,非常棒! 89 | 90 | **使用 `jclasslib` 不光可以直观地查看某个类对应的字节码文件,还可以查看类的基本信息、常量池、接口、属性、函数等信息。** 91 | 92 | ![jclasslib3](./assets/image-20201012145646086.png) 93 | 94 | 我们直接在 IDEA 的插件市场即可找到这个插件。我这里已经安装好了。 95 | 96 | ![jclasslib4](./assets/image-20201012145900911.png) 97 | 98 | 安装完成之后,重启 IDEA。点击 `View -> Show Bytecode With jclasslib` 即可通过 `jclasslib` 查看某个类对应的字节码文件。 99 | 100 | ![使用 IDEA 插件 jclasslib 查看类的字节码](./assets/image-20201012150252106.png) 101 | -------------------------------------------------------------------------------- /docs/plugins/jclasslib/assets/image-20201012143530226.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/jclasslib/assets/image-20201012143530226.png -------------------------------------------------------------------------------- /docs/plugins/jclasslib/assets/image-20201012145127465.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/jclasslib/assets/image-20201012145127465.png -------------------------------------------------------------------------------- /docs/plugins/jclasslib/assets/image-20201012145646086.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/jclasslib/assets/image-20201012145646086.png -------------------------------------------------------------------------------- /docs/plugins/jclasslib/assets/image-20201012145900911.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/jclasslib/assets/image-20201012145900911.png -------------------------------------------------------------------------------- /docs/plugins/jclasslib/assets/image-20201012150252106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/jclasslib/assets/image-20201012150252106.png -------------------------------------------------------------------------------- /docs/plugins/jclasslib/assets/image-20201013084919965.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/jclasslib/assets/image-20201013084919965.png -------------------------------------------------------------------------------- /docs/plugins/maven-helper.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | Maven Helper: 解决 Maven 依赖冲突问题 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | - Maven 9 | --- 10 | 11 | **Maven Helper** 主要用来分析 Maven 项目的相关依赖,可以帮助我们解决 Maven 依赖冲突问题。 12 | 13 | ![maver-helpe](./assets/maver-helper.png) 14 | 15 | ::: tip 何为依赖冲突? 16 | 17 | 说白了就是你的项目使用的 2 个 jar 包引用了同一个依赖 h,并且 h 的版本还不一样,这个时候你的项目就存在两个不同版本的 h。这时 Maven 会依据依赖路径最短优先原则,来决定使用哪个版本的 Jar 包,而另一个无用的 Jar 包则未被使用,这就是所谓的依赖冲突。 18 | 19 | ::: 20 | 21 | 大部分情况下,依赖冲突可能并不会对系统造成什么异常,因为 Maven 始终选择了一个 Jar 包来使用。但是,不排除在某些特定条件下,会出现类似找不到类的异常,所以,只要存在依赖冲突,在我看来,最好还是解决掉,不要给系统留下隐患。 22 | -------------------------------------------------------------------------------- /docs/plugins/others.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 其他 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 插件 7 | --- 8 | 9 | 1. **IdeaVim**:适用于 JetBrains IDE 的 Vim 引擎。 10 | 1. **Chinese (Simplified) Language Pack**:中文语言包,将 IDEA 转换为中文界面。 11 | 1. **leetcode editor** :提供在线 Leetcode 刷题功能,比较方便我们刷题,不过我试用之后发现有一些小 bug,个人感觉还是直接在网站找题目刷来的痛快一些。 12 | 1. **​A Search with Github**: 直接通过 Github 搜索相关代码。 13 | 1. **stackoverflow**: 选中相关内容后单击右键即可快速跳转到 stackoverflow 。 14 | 1. **CodeStream**: 让 code review 变得更加容易。 15 | 1. **Code screenshots**: 代码片段保存为图片。 16 | 1. **GitToolBox** :Git 工具箱 17 | 1. **OK,​ Gradle!**: 搜索 Java 库用于 Gradle 项目 18 | 1. **Java Stream Debugger**: Java8 Stream 调试器 19 | 1. **EasyCode**: Easycode 可以直接对数据的表生成 entity、controller、service、dao、mapper 无需任何编码,简单而强大。更多内容可以查看这篇文章: [《懒人 IDEA 插件插件:EasyCode 一键帮你生成所需代码~》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486205&idx=1&sn=0ff2f87f0d82a1bd9c0c44328ef69435&chksm=cea24536f9d5cc20c6cc7669f0d4167d747fe8b8c05a64546c0162d694aa96044a2862e24b57&token=1862674725&lang=zh_CN#rd) 20 | 1. **JFormDesigner**: Swing GUI 在线编辑器。 21 | 1. **VisualVM Launcher**: Java 性能分析神器。 22 | 1. ...... 23 | -------------------------------------------------------------------------------- /docs/plugins/rest/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | RestfulToolkit: RESTful Web 服务辅助开发工具 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | --- 9 | 10 | 开始推荐这个 IDEA 插件之前,我觉得有必要花一小会时间简单聊聊 **REST** 这个我们经常打交道的概念。 11 | 12 | ## REST 相关概念解读 13 | 14 | ### 何为 REST? 15 | 16 | REST 即 **REpresentational State Transfer** 的缩写。这个词组的翻译过来就是"**表现层状态转化**"。 17 | 18 | 这样理解起来甚是晦涩,实际上 REST 的全称是 **Resource Representational State Transfer** ,直白地翻译过来就是 **“资源”在网络传输中以某种“表现形式”进行“状态转移”** 。 19 | 20 | **有没有感觉很难理解?** 21 | 22 | 没关系,看了我对 REST 涉及到的一些概念的解读之后你没准就能理解了! 23 | 24 | - **资源(Resource)**: 我们可以把真实的对象数据称为资源。一个资源既可以是一个集合,也可以是单个个体。比如我们的班级 classes 是代表一个集合形式的资源,而特定的 class 代表单个个体资源。每一种资源都有特定的 URI(统一资源定位符)与之对应,如果我们需要获取这个资源,访问这个 URI 就可以了,比如获取特定的班级: `/class/12`。另外,资源也可以包含子资源,比如 `/classes/classId/teachers`: 列出某个指定班级的所有老师的信息 25 | - **表现形式(Representational)**: "资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式比如 json,xml,image,txt 等等叫做它的"表现层/表现形式"。 26 | - **状态转移(State Transfer)**: 大家第一眼看到这个词语一定会很懵逼?内心 BB: 这尼玛是啥啊? **大白话来说 REST 中的状态转移更多地描述的服务器端资源的状态,比如你通过增删改查(通过 HTTP 动词实现)引起资源状态的改变。** (HTTP 协议是一个无状态的,所有的资源状态都保存在服务器端) 27 | 28 | ### 何为 RESTful 架构? 29 | 30 | 满足 REST 风格的架构设计就可以称为 RESTful 架构: 31 | 32 | 1. 每一个 URI 代表一种资源; 33 | 1. 客户端和服务器之间,传递这种资源的某种表现形式比如 json,xml,image,txt 等等; 34 | 1. 客户端通过特定的 HTTP 动词,对服务器端资源进行操作,实现"表现层状态转化"。 35 | 36 | ### 何为 RESTful Web 服务? 37 | 38 | 基于 REST 架构的 Web 服务就被称为 RESTful Web 服务。 39 | 40 | ## RESTful Web 服务辅助开发工具 41 | 42 | ### 安装 43 | 44 | 这个插件的名字叫做 “**RestfulToolkit**” 。我们直接在 IDEA 的插件市场即可找到这个插件。如下图所示。 45 | 46 | > 如果你因为网络问题没办法使用 IDEA 自带的插件市场的话,也可以通过[IDEA 插件市场的官网](https://plugins.jetbrains.com/idea)手动下载安装。 47 | 48 | ![](https://oss.javaguide.cn/github/javaguide/tools/idea/41a9bfa18920403ba4db83e324f8621e~tplv-k3u1fbpfcp-zoom-1.png) 49 | 50 | ### 简单使用 51 | 52 | #### URL 跳转到对应方法 53 | 54 | 根据 URL 直接跳转到对应的方法定义 (Windows: `ctrl+\` or `ctrl+alt+n` Mac:`command+\` or `command+alt+n` )并且提供了一个服务的树形可视化显示窗口。 如下图所示。 55 | 56 | ![](https://oss.javaguide.cn/github/javaguide/tools/idea/c26ea05ad472488fbf9eb21627964bee~tplv-k3u1fbpfcp-zoom-1.png) 57 | 58 | #### 作为 HTTP 请求工具 59 | 60 | 这个插件还可以作为一个简单的 http 请求工具来使用。如下图所示。 61 | 62 | ![](https://oss.javaguide.cn/javaguide/RestfulToolkit2.png) 63 | 64 | #### 复制生成 URL、复制方法参数... 65 | 66 | 这个插件还提供了生成 URL、查询参数、请求体(RequestBody)等功能。 67 | 68 | 举个例子。我们选中 `Controller` 中的某个请求对应的方法右击,你会发现多了几个可选项。当你选择`Generate & Copy Full URL`的话,就可以把整个请求的路径直接复制下来。eg: `http://localhost:9333/api/users?pageNum=1&pageSize=1` 。 69 | 70 | ![](./assets/RestfulToolkit3.png) 71 | 72 | #### 将 Java 类转换为对应的 JSON 格式 73 | 74 | 这个插件还为 Java 类上添加了 **Convert to JSON** 功能 。 75 | 76 | 我们选中的某个类对应的方法然后右击,你会发现多了几个可选项。 77 | 78 | ![](./assets/RestfulToolkit4.png) 79 | 80 | 当我们选择 `Convert to JSON` 的话,你会得到如下 json 类型的数据: 81 | 82 | ```json 83 | { 84 | "username": "demoData", 85 | "password": "demoData", 86 | "rememberMe": true 87 | } 88 | ``` 89 | 90 | ## 后记 91 | 92 | RESTFulToolkit 原作者不更新了,IDEA.201 及以上版本不再适配。 93 | 94 | 因此,国内就有一个大佬参考 RESTFulToolkit 开发了一款类似的插件 —— RestfulTool(功能较少一些,不过够用了)。 95 | 96 | ![](https://oss.javaguide.cn/javaguide/image-20210830112030237.png) 97 | -------------------------------------------------------------------------------- /docs/plugins/rest/assets/RestfulToolkit1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/rest/assets/RestfulToolkit1.png -------------------------------------------------------------------------------- /docs/plugins/rest/assets/RestfulToolkit2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/rest/assets/RestfulToolkit2.png -------------------------------------------------------------------------------- /docs/plugins/rest/assets/RestfulToolkit3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/rest/assets/RestfulToolkit3.png -------------------------------------------------------------------------------- /docs/plugins/rest/assets/RestfulToolkit4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/rest/assets/RestfulToolkit4.png -------------------------------------------------------------------------------- /docs/plugins/save-actions/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | Save Actions: 优化文件保存 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | --- 9 | 10 | 真必备插件!可以帮助我们在保存文件的时候: 11 | 12 | 1. 优化导入; 13 | 1. 格式化代码; 14 | 1. 执行一些 quick fix 15 | 1. ...... 16 | 17 | 这个插件是支持可配置的,我的配置如下: 18 | 19 | ![save-actions](https://oss.javaguide.cn/idea/plugins/save-actions.png) 20 | 21 | 实际使用效果如下: 22 | 23 | ![save-actions2](./assets/save-actions2.gif) 24 | -------------------------------------------------------------------------------- /docs/plugins/save-actions/assets/save-actions2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/save-actions/assets/save-actions2.gif -------------------------------------------------------------------------------- /docs/plugins/sequence-diagram.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: SequenceDiagram:一键可以生成时序图 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 插件 7 | --- 8 | 9 | 在平时的学习/工作中,我们会经常面临如下场景: 10 | 11 | 1. 阅读别人的代码 12 | 1. 阅读框架源码 13 | 1. 阅读自己很久之前写的代码。 14 | 15 | 千万不要觉得工作就是单纯写代码,实际工作中,你会发现你的大部分时间实际都花在了阅读和理解已有代码上。 16 | 17 | 为了能够更快更清晰地搞清对象之间的调用关系,我经常需要用到序列图。手动画序列图还是很麻烦费时间的,不过 IDEA 提供了一个叫做**SequenceDiagram** 的插件帮助我们解决这个问题。通过 SequenceDiagram 这个插件,我们一键可以生成时序图。 18 | 19 | ## 何为序列图? 20 | 21 | 网上对于序列图的定义有很多,我觉得都不太好理解,太抽象了。最神奇的是,大部分文章对于序列图的定义竟然都是一模一样,看来大家是充分发挥了写代码的“精髓”啊! 22 | 23 | 我还是简单说一说我的理解吧!不过,说实话,我自己对于 Sequence Diagram 也不是很明朗。下面的描述如有问题和需要完善的地方,还请指出。 24 | 25 | ::: info 序列图 26 | 27 | **序列图**(Sequence Diagram),亦称为**循序图**,是一种[UML](https://zh.m.wikipedia.org/wiki/UML)行为图。表示系统执行某个方法/操作(如登录操作)时,对象之间的顺序调用关系。 28 | 29 | ::: 30 | 31 | 这个顺序调用关系可以这样理解: 你需要执行系统中某个对象 a 提供的方法/操作 login(登录),但是这个对象又依赖了对象 b 提供的方法 getUser(获取用户)。因此,这里就有了 a -> b 调用关系之说。 32 | 33 | 再举两个例子来说一下! 34 | 35 | 下图是微信支付的业务流程时序图。这个图描述了微信支付相关角色(顾客,商家...)在微信支付场景下,基础支付和支付的的顺序调用关系。 36 | 37 | ![](https://oss.javaguide.cn/github/awesome-idea-tutorial/3a48c8d17aea2064ff11b6d3fd1fb2cb.png) 38 | 39 | 下图是我写的一个 HTTP 框架中的执行某个方法的序列图。这个图描述了我们在调用 `InterceptorFactory`类的 `loadInterceptors()` 方法的时候,所涉及到的类之间的调用关系。 40 | 41 | ![](https://oss.javaguide.cn/idea/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzM3Mjcy,size_16,color_FFFFFF,t_70.png) 42 | 43 | 另外,国内一般更喜欢称呼序列图为"时序图"。 44 | 45 | - 如果你按照纯翻译的角度来说, sequence 这个单词并无"时间"的意思,只有序列,顺序等意思,因此也有人说“时序图”的说法是不准确的。 46 | - 如果从定义角度来说,时序图这个描述是没问题的。因为 Sequence Diagram 中每条消息的触发时机确实是按照时间顺序执行的。 47 | 48 | 我觉得称呼 Sequence Diagram 为时序图或者序列图都是没问题的,不用太纠结。 49 | 50 | ## 哪些场景下需要查看类的时序图? 51 | 52 | 我们在很多场景下都需要时序图,比如说: 53 | 54 | 1. **阅读源码**: 阅读源码的时候,你可能需要查看调用目标方法涉及的相关类的调用关系。特别是在代码的调用层级比较多的时候,对于我们理解源码非常有用。(_题外话:实际工作中,大部分时间实际我们都花在了阅读理解已有代码上。_) 55 | 2. **技术文档编写**: 我们在写项目介绍文档的时候,为了让别人更容易理解你的代码,你需要根据核心方法为相关的类生成时序图来展示他们之间的调用关系。 56 | 3. **梳理业务流程**: 当我们的系统业务流程比较复杂的时候,我们可以通过序列图将系统中涉及的重要的角色和对象的之间关系可视化出来。 57 | 4. ...... 58 | 59 | ## 如何使用 IDEA 根据类中方法生成时序图? 60 | 61 | **通过 SequenceDiagram 这个插件,我们一键可以生成时序图。** 62 | 63 | 并且,你还可以: 64 | 65 | 1. 点击时序图中的类/方法即可跳转到对应的地方。 66 | 2. 从时序图中删除对应的类或者方法。 67 | 3. 将生成的时序图导出为 PNG 图片格式。 68 | 69 | ### 安装 70 | 71 | 我们直接在 IDEA 的插件市场即可找到这个插件。我这里已经安装好了。 72 | 73 | ::: tip 74 | 75 | 如果你因为网络问题没办法使用 IDEA 自带的插件市场的话,也可以通过[IDEA 插件市场的官网](https://plugins.jetbrains.com/idea)手动下载安装。 76 | 77 | ::: 78 | 79 | ![](https://oss.javaguide.cn/idea/20201021165654262.png) 80 | 81 | ### 简单使用 82 | 83 | 1. 选中方法名(注意不要选类名),然后点击鼠标右键,选择 **Sequence Diagram** 选项即可! 84 | 85 | ![](https://oss.javaguide.cn/idea/20201021170110697-20211010211819042.png) 86 | 87 | 1. 配置生成的序列图的一些基本的参数比如调用深度之后,我们点击 ok 即可! 88 | 89 | ![](https://oss.javaguide.cn/idea/c5040f1105c762ddf8689892913bc02d-20211010211823985.png) 90 | 91 | 你还可以通过生成的时序图来定位到相关的代码,这对于我们阅读源码的时候尤其有帮助! 92 | 93 | ![](https://oss.javaguide.cn/idea/20201021171623809-20211010211828759.png) 94 | 95 | 时序图生成完成之后,你还可以选择将其导出为图片。 96 | 97 | ![](https://oss.javaguide.cn/idea/20201021170228723-20211010211832965.png) 98 | -------------------------------------------------------------------------------- /docs/plugins/shortcut-key.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Key Promoter X 和 Presentation Assistant:快捷键提示和展示 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 插件 7 | --- 8 | 9 | 相信我!下面这两个一定是 IDEA 必备的插件。 10 | 11 | ## Key Promoter X: 快捷键提示 12 | 13 | 这个插件的功能主要是**在你本可以使用快捷键操作的地方提醒你用快捷键操作。** 14 | 15 | 举个例子。我直接点击 tab 栏下的菜单打开 Version Control(版本控制) 的话,这个插件就会提示你可以用快捷键 `command+9`或者`shift+command+9`打开。如下图所示。 16 | 17 | ![](https://oss.javaguide.cn/idea/Key-Promoter-X1.png) 18 | 19 | 除了这个很棒的功能之外,这个插件还有一个功能我觉得非常棒。 20 | 21 | 它可以展示出哪些快捷键你忘记使用的次数最多!这样的话,你可以给予你忘记次数最多的那些快捷键更多的关注。 22 | 23 | 我忘记最多的快捷键是 debug 的时候经常使用的 F8(Step Over)。如下图所示。 24 | 25 | ![](https://oss.javaguide.cn/idea/Key-Promoter-X2.png) 26 | 27 | 关于快捷键,很多人不愿意去记,觉得单纯靠鼠标就完全够了。 28 | 29 | 让我来说的话!我觉得如果你偶尔使用一两次 IDEA 的话,你完全没有必要纠结快捷键。 30 | 31 | 但是,如果 IDEA 是你开发的主力,你经常需要使用的话,相信我,掌握常用的一些快捷键真的很重要! 32 | 33 | 不说多的,**熟练掌握 IDEA 的一些最常见的快捷键,你的工作效率至少提升 30 %。** 34 | 35 | **除了工作效率的提升之外,使用快捷键会让我们显得更加专业。** 36 | 37 | 你在使用快捷键进行操作的时候,是很帅,很酷啊!但是,当你用 IDEA 给别人演示一些操作的时候,你使用了快捷键的话,别人可能根本不知道你进行了什么快捷键操作。 38 | 39 | **怎么解决这个问题呢?** 40 | 41 | 很简单!这个时候就轮到 **Presentation Assistant** 这个插件上场了! 42 | 43 | ## Presentation Assistant: 快捷键展示 44 | 45 | 安装这个插件之后,你使用的快捷键操作都会被可视化地展示出来,非常适合自己在录制视频或者给别人展示代码的时候使用。 46 | 47 | 举个例子。我使用快捷键 `command+9`打开 Version Control ,使用了这个插件之后的效果如下图所示。 48 | 49 | ![Presentation-Assistant](./assets/Presentation-Assistant.png) 50 | 51 | 从上图可以很清晰地看到,IDEA 的底部中间的位置将我刚刚所使用的快捷键给展示了出来。 52 | 53 | 并且,**这个插件会展示出 Mac 和 Win/Linux 两种不同的版本的快捷键。** 54 | 55 | 因此,不论你的操作系统是 Mac 还是 Win/Linux ,这款插件都能满足你的需求。 56 | -------------------------------------------------------------------------------- /docs/plugins/themes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IDEA 美观主题插件总结 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 插件 7 | --- 8 | 9 | 经常有小伙伴问我: “Guide 哥,你的 IDEA 主题怎么这么好看,能推荐一下不?”。就实在有点不耐烦了,才索性写了这篇文章。 10 | 11 | 在这篇文章中,我精选了几个比较是和 Java 编码的 IDEA 主题供小伙伴们选择。另外,我自己用的是 One Dark theme 这款。 12 | 13 | ::: note 14 | 15 | 以下主题按照使用人数降序排序。 16 | 17 | ::: 18 | 19 | ## [Material Theme UI](https://plugins.jetbrains.com/plugin/8006-material-theme-ui) 20 | 21 | ::: info 推荐指数: ⭐⭐⭐⭐ 22 | 23 | ::: 24 | 25 | 这是 IDEA 中使用人数最多的一款主题。 26 | 27 | 当你安装完这个插件之后,你会发现这个主题本身又提供了多种相关的主题供你选择。 28 | 29 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-3@main/11-20/image-20201119182935201.png) 30 | 31 | **Material Deep Ocean** 这款的效果图如下。默认的字体是真的小,小伙伴们需要自行调整一下。 32 | 33 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-3@main/11-20/image-20201119183044068.png) 34 | 35 | ## [One Dark theme](https://plugins.jetbrains.com/plugin/11938-one-dark-theme) 36 | 37 | ::: info 推荐指数: ⭐⭐⭐⭐⭐ 38 | 39 | ::: 40 | 41 | 我比较喜欢的一款(_黄色比较多?_)。 没有花里花哨,简单大气,看起来比较舒服。颜色搭配也很棒,适合编码! 42 | 43 | 这款主题的效果图如下。 44 | 45 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-3@main/11-20-11/image-20201119180300975.png) 46 | 47 | ## [Gradianto](https://plugins.jetbrains.com/plugin/12334-gradianto) 48 | 49 | ::: info 推荐指数: ⭐⭐⭐⭐⭐ 50 | 51 | ::: 52 | 53 | Gradianto 这个主题的目标是在保持页面色彩比较层次分明的情况下,让我们因为代码而疲惫的双眼更加轻松。 54 | 55 | Gradianto 附带了自然界的渐变色,看着挺舒服的。另外,这个主题本身也提供了多种相关的主题供你选择。 56 | 57 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-3@main/11-20/image-20201119183825753.png) 58 | 59 | **Gradianto Nature Green** 的效果图如下。 60 | 61 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-3@main/11-20/image-20201119183920889.png) 62 | 63 | ## [Dark Purple Theme](https://plugins.jetbrains.com/plugin/12100-dark-purple-theme) 64 | 65 | ::: info 推荐指数: ⭐⭐⭐⭐⭐ 66 | 67 | ::: 68 | 69 | 这是一款紫色色调的深色主题,喜欢紫色的小伙伴不要错过。 70 | 71 | 这个主题的效果图如下。个人觉得整体颜色搭配的是比较不错的,适合编码! 72 | 73 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-3@main/11-20-11/image-20201119184654132.png) 74 | 75 | ## [Hiberbee Theme](https://plugins.jetbrains.com/plugin/12118-hiberbee-theme) 76 | 77 | ::: info 推荐指数: ⭐⭐⭐⭐⭐ 78 | 79 | ::: 80 | 81 | 一款受到了 Monokai Pro 和 MacOS Mojave 启发的主题,是一款色彩层次分明的深色主题。 82 | 83 | 这个主题的效果图如下。看着也是非常赞!适合编码! 84 | 85 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-3@main/11-20-11/image-20201119191441248.png) 86 | 87 | 上面推荐的都是偏暗色系的主题,这里我再推荐两款浅色系的主题。 88 | 89 | ## [Gray Theme](https://plugins.jetbrains.com/plugin/12103-gray-theme) 90 | 91 | ::: info 推荐指数: ⭐⭐⭐ 92 | 93 | ::: 94 | 95 | 这是一款对比度比较低的一款浅色主题,不太适合代码阅读,毕竟这款主题是专门为在 IntelliJ IDE 中使用 Markdown 而设计的。 96 | 97 | 这个主题的效果图如下。 98 | 99 | ![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-3@main/11-20-11/image-20201119194512164.png) 100 | 101 | ## [Roboticket Light Theme](https://plugins.jetbrains.com/plugin/12191-roboticket-light-theme) 102 | 103 | ::: info 推荐指数: ⭐⭐⭐ 104 | 105 | ::: 106 | 107 | 这是一款对比度比较低的浅色主题,不太适合代码阅读。 108 | 109 | 这个主题的效果图如下。 110 | 111 | ![](https://oss.javaguide.cn/github/awesome-idea-tutorial/194581c7b72d49b512b12814340f00c8.png) 112 | 113 | ## 后记 114 | 115 | 我个人还是比较偏爱深色系的主题。 116 | 117 | 小伙伴们比较喜欢哪款主题呢?可以在评论区简单聊聊不?如果你还有其他比较喜欢的主题也可以在评论区说出来供大家参考哦! 118 | -------------------------------------------------------------------------------- /docs/plugins/translation/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: |- 3 | Translation: 翻译 4 | category: IDEA 指南 5 | tag: 6 | - IDEA 7 | - IDEA 插件 8 | --- 9 | 10 | 有了这个插件之后,你再也不用在编码的时候打开浏览器查找某个单词怎么拼写、某句英文注释什么意思了。 11 | 12 | 并且,这个插件支持多种翻译源: 13 | 14 | 1. Google 翻译 15 | 1. Youdao 翻译 16 | 1. Baidu 翻译 17 | 18 | 除了翻译功能之外还提供了语音朗读、单词本等实用功能。这个插件的 Github 地址是: [https://github.com/YiiGuxing/TranslationPlugin](https://github.com/YiiGuxing/TranslationPlugin) (貌似是国人开发的,很赞)。 19 | 20 | **使用方法很简单!选中你要翻译的单词或者句子,使用快捷键 `command+ctrl+u(mac)` / `shift+ctrl+y(win/linux)`** (如果你忘记了快捷的话,鼠标右键操作即可!) 21 | 22 | ![translation1](./assets/translation1.jpg) 23 | 24 | **如果需要快速打开翻译框,使用快捷键`command+ctrl+i(mac)`/`ctrl + shift + o(win/linux)`** 25 | 26 | ![translation2](./assets/translation2.png) 27 | 28 | 如果你需要将某个重要的单词添加到生词本的话,只需要点击单词旁边的收藏按钮即可! 29 | -------------------------------------------------------------------------------- /docs/plugins/translation/assets/translation1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/translation/assets/translation1.jpg -------------------------------------------------------------------------------- /docs/plugins/translation/assets/translation2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/plugins/translation/assets/translation2.png -------------------------------------------------------------------------------- /docs/tips/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 使用技巧 3 | icon: guide 4 | --- 5 | 6 | ## 目录 7 | 8 | - [IDEA 高效使用指南](./efficient-use-guide.md) 9 | - [IDEA 高效重构指南](./refractor-intro.md) 10 | - [IDEA 插件开发入门](./plug-in-development-intro.md) 11 | - [IDEA 源码阅读小技巧](./source-code-reading-skills.md) 12 | -------------------------------------------------------------------------------- /docs/tips/assets/Alibaba-Java-Code-Guidelines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/Alibaba-Java-Code-Guidelines.png -------------------------------------------------------------------------------- /docs/tips/assets/Alibaba-Java-Code-Guidelines2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/Alibaba-Java-Code-Guidelines2.png -------------------------------------------------------------------------------- /docs/tips/assets/exact/exact-field.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/exact/exact-field.gif -------------------------------------------------------------------------------- /docs/tips/assets/exact/exact-interface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/exact/exact-interface.gif -------------------------------------------------------------------------------- /docs/tips/assets/exact/exact-method.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/exact/exact-method.gif -------------------------------------------------------------------------------- /docs/tips/assets/exact/exact-parameter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/exact/exact-parameter.gif -------------------------------------------------------------------------------- /docs/tips/assets/exact/exact-variable.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/exact/exact-variable.gif -------------------------------------------------------------------------------- /docs/tips/assets/exact/extract-constant.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/exact/extract-constant.gif -------------------------------------------------------------------------------- /docs/tips/assets/install-plugin-from-disk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/install-plugin-from-disk.png -------------------------------------------------------------------------------- /docs/tips/assets/refractor-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/refractor-help.png -------------------------------------------------------------------------------- /docs/tips/assets/rename.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodingDocs/awesome-idea/398a0534ff872ea92ea360c439ecd67ab0bd3e5b/docs/tips/assets/rename.gif -------------------------------------------------------------------------------- /docs/tips/efficient-use-guide.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IDEA 高效使用教程 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 教程 7 | - 高效使用 8 | --- 9 | 10 | > 文中使用的 IDEA 版本是 IntelliJ IDEA 2021.2,其他版本也都是类似的。 11 | 12 | 大家好,我是 Guide! 13 | 14 | 昨晚刷到一篇知乎 370 多点赞的 IDEA 高效使用教程,带着好奇心,点击去一看,好家伙,又是盗用别人原创为自己引流的恶心行为。 15 | 16 | 让我纳闷的是,这篇文章的内容质量非常差,而且内容已经过时了(原文是 2018 年写的),竟然还能获得 370 多点赞。我自己非常多文章别人盗发几百点赞,我自己发个位数的点赞,就很奇葩,说多了都是泪...... 17 | 18 | 于是,我利用昨天晚上和早起的这会时间总结了这篇 **IDEA 高效使用教程** 。希望对大家有帮助! 19 | 20 | ## 高效设置 21 | 22 | 我们先来讲讲有哪些设置调整之后 IDEA 会更好用。先说明一点: **这里只是根据我个人喜好和习惯的建议,IDEA 的默认配置已经很好用了,具体要不要修改还是要看个人喜好和习惯了。** 23 | 24 | ### 调整窗口字体显示大小 25 | 26 | 巨好用的一个功能!强烈安利! 27 | 28 | 勾选上 _Preferences / Settings | Editor | General_ 下的 _Change font size with Command + Mouse Wheel_ 选项之后,我们就可以直接使用 `⌘+鼠标滚轮`(Mac)/ `Ctrl+鼠标滚轮`(Windows&Linux)来更改窗口字体的大小 29 | 30 | ![开启更改所有选项卡的字体大小功能](https://oss.javaguide.cn/github/awesome-idea-tutorial/90540bf7b6a94f2da9a50bd6587d1e58.png) 31 | 32 | ### 字体设置 33 | 34 | 修改 _Preferences / Settings | Editor | Font_ 选项下的字体设置,字体推荐使用 JetBrains Mono ,字体大小建议 16/18,根据个人需要选择是否需要开启连字。 35 | 36 | ![字体设置](https://oss.javaguide.cn/github/awesome-idea-tutorial/348b7d381322420383d0c4fc502b4068.png) 37 | 38 | 连字开启之后,代码可读性会更强。 39 | 40 | ![开启连字之前&之后](https://oss.javaguide.cn/github/awesome-idea-tutorial/9f7faa76ecbc4865b44460e506cb2f30.png) 41 | 42 | ### 配置类注释模板 43 | 44 | 修改 _Preferences / Settings | Editor | File adn Code Templates_ 下的 `Class` 和 `Enum` 的模板。 45 | 46 | ![配置类注释模板.](https://oss.javaguide.cn/github/awesome-idea-tutorial/a17b77401ea743c2bbd84441bf458d15.png) 47 | 48 | 我的日常项目的类注释模板配置为: 49 | 50 | ```java 51 | /** 52 | * 微信搜 JavaGuide 回复"面试突击"即可免费领取个人原创的 Java 面试手册 53 | * @author Guide哥 54 | * @date ${YEAR}/${MONTH}/${DAY} ${HOUR}:${MINUTE} 55 | **/ 56 | public class ${NAME} { 57 | } 58 | ``` 59 | 60 | ### 优化 Live Templates 61 | 62 | IDEA 自带的编码模板我们平时在编码的时候就会经常用到,不知道大家有没有注意。就比如说你输入一个 `sout` 就可以直接输出一行输出语句 `System.out.println();` 。 63 | 64 | ![配置LiveTemplates](https://oss.javaguide.cn/github/awesome-idea-tutorial/0fcc5dec656b424898223014864e54a5.png) 65 | 66 | 你可以根据自己的习惯对 IDEA 自带的编码模板进行修改,并且,你还可以添加新的编码模板来提高编码速度。非常使用! 67 | 68 | ### 全局设置 SDK 69 | 70 | 修改 _File -> New Projects Setup -> Structure...| Project_ 下的 Project SDK 选项,将其更改为你最常用的 Java 版本。 71 | 72 | ![全局jdk配置](https://oss.javaguide.cn/github/awesome-idea-tutorial/4136768ead774bd197a6323f726fdcf7.png) 73 | 74 | 这样的话,你新导入的项目或者新建的项目都会默认使用这个版本的 SDK。 75 | 76 | ### 自动导包&删除无用包 77 | 78 | 勾选上 _Preferences / Settings | Editor | General | Auto Import_ 下的指定选项即可! 79 | 80 | ![自动导包&删除无用包](https://oss.javaguide.cn/github/awesome-idea-tutorial/77d3f95095a94db4b27bcdcc35cc90a2.png) 81 | 82 | 这样设置之后,IDEA 会自动帮你导包(唯一确定的时候才会生效)以及删除代码中没用到的包。 83 | 84 | ### 显示方法分割线 85 | 86 | 勾选上 _Preferences / Settings | Editor | General | Appearance_ 下的 Show method separators 选项之后,方法分割线就有了,这会小幅提高代码的可读性。 87 | 88 | ![显示方法分割线](https://oss.javaguide.cn/javaguide/%E6%98%BE%E7%A4%BA%E6%96%B9%E6%B3%95%E5%88%86%E5%89%B2%E7%BA%BF.png) 89 | 90 | ### 显示某个文件的提交记录 91 | 92 | 在界面左侧空白区域邮件,勾选上 _Annotate with Git Blame_ 即可显示对应文件详细代码提交记录,包括提交信息、提交人、变更文件等信息,非常强大! 93 | 94 | ![](https://oss.javaguide.cn/github/awesome-idea-tutorial/8a33b15770b464d9673063f00da8b6ca.png) 95 | 96 | ## 必备插件 97 | 98 | 好用的插件太多了,我这里只推荐 6 个我最常用的 IDEA 插件。更多插件推荐可以看 [IDEA 必备插件专题](https://idea.javaguide.cn/plugins/)。 99 | 100 | ### jclasslib: 字节码查看神器 101 | 102 | 使用 `jclasslib` 不光可以直观地查看某个类对应的字节码文件,还可以查看类的基本信息、常量池、接口、属性、函数等信息。 103 | 104 | ![字节码查看神器](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/2020-10/image-20201012145646086.png) 105 | 106 | ### Tabnine: 基于 AI 的代码提示 107 | 108 | Tabnine 的前身是大名鼎鼎的 Codota。我一直在用的一个插件,可以说非常好用了。 109 | 110 | Tabnine 这个插件用于智能代码补全,它基于数百万 Java 程序,能够根据程序上下文提示补全代码。Tabnine 和 IDEA 自带的智能提示两者互补。 111 | 112 | 如果你觉得 IDEA 插件安装的太多比较卡顿的话,不用担心!Tabnine 插件还有一个对应的在线网站,在这个网站上你可以根据代码关键字搜索相关代码示例,非常不错!网站地址: https://www.tabnine.com/ 。 113 | 114 | ![Tabnine网页版示意图](https://oss.javaguide.cn/javaguide/Tabnine.png) 115 | 116 | ### Key Promoter X:快捷键提示 117 | 118 | 这个插件的功能主要是**在你本可以使用快捷键操作的地方提醒你用快捷键操作。** 119 | 120 | 举个例子。我直接点击 tab 栏下的菜单打开 Version Control(版本控制) 的话,这个插件就会提示你可以用快捷键 `command+9`或者`shift+command+9`打开。如下图所示。 121 | 122 | ![快捷键提示](https://oss.javaguide.cn/idea/Key-Promoter-X1.png) 123 | 124 | 它还可以展示出哪些快捷键你忘记使用的次数最多! 125 | 126 | ![遗忘的快捷键次数统计](https://oss.javaguide.cn/idea/Key-Promoter-X2.png) 127 | 128 | ### Alibaba Java Code Guidelines: 阿里巴巴 Java 代码规范 129 | 130 | 阿里巴巴 Java 代码规范,对应的 Github 地址为: [https://github.com/alibaba/p3c (opens new window)](https://github.com/alibaba/p3c) 。非常推荐安装! 131 | 132 | 安装完成之后建议将与语言替换成中文,提示更加友好一点。 133 | 134 | ![阿里巴巴 Java 代码规范](./assets/Alibaba-Java-Code-Guidelines.png) 135 | 136 | 根据官方描述: 137 | 138 | > 目前这个插件实现了开发手册中的的 53 条规则,大部分基于 PMD 实现,其中有 4 条规则基于 IDEA 实现,并且基于 IDEA [Inspection (opens new window)](https://www.jetbrains.com/help/idea/code-inspection.html)实现了实时检测功能。部分规则实现了 Quick Fix 功能,对于可以提供 Quick Fix 但没有提供的,我们会尽快实现,也欢迎有兴趣的同学加入进来一起努力。 目前插件检测有两种模式: 实时检测、手动触发。 139 | 140 | 上述提到的开发手册也就是在 Java 开发领域赫赫有名的《阿里巴巴 Java 开发手册》。 141 | 142 | 这个插件会实时检测出我们的代码不匹配它的规则的地方,并且会给出修改建议。比如我们按照下面的方式去创建线程池的话,这个插件就会帮我们检测出来,如下图所示。 143 | 144 | ![阿里巴巴 Java 代码规范](./assets/Alibaba-Java-Code-Guidelines2.png) 145 | 146 | ### SequenceDiagram: 一键生成时序图 147 | 148 | **通过 SequenceDiagram 这个插件,我们一键可以生成时序图。** 并且,你还可以: 149 | 150 | 1. 点击时序图中的类/方法即可跳转到对应的地方。 151 | 2. 从时序图中删除对应的类或者方法。 152 | 3. 将生成的时序图导出为 PNG 图片格式。 153 | 154 | ![一键生成时序图](https://oss.javaguide.cn/idea/20201021171623809-20211010211828759.png) 155 | 156 | ### Save Actions: 优化文件保存 157 | 158 | 这个插件可以帮助我们在保存文件的时候: 159 | 160 | 1. 优化导入; 161 | 2. 格式化代码; 162 | 3. 执行一些 quick fix 163 | 4. ...... 164 | 165 | 这个插件是支持可配置的,我的配置如下: 166 | 167 | ![save-actions](https://oss.javaguide.cn/idea/plugins/save-actions.png) 168 | 169 | ## 主题优化 170 | 171 | 在[这几款 IDEA 主题也太好看了吧!!](../plugins/themes.md)这篇文章中,我精选了几个比较适合 Java 编码的 IDEA 主题供小伙伴们选择(我自己用的是 One Dark theme 这款)。 172 | 173 | ![One Dark theme ](https://oss.javaguide.cn/github/awesome-idea-tutorial/4577a98272094d1d96f092e50d3d6d5e.png) 174 | 175 | 挺难受的,本着一片好意发这篇文章,结果还被喷了,很多小伙伴说我审美不行,还有一些小伙伴说花里胡哨的,没有原本自带的主题好看。 176 | 177 | 萝卜白菜各有所爱吧!保持一个包容的心态不是很难吧?你可以不装任何插件,但不要认为别人装插件就是多余,IDEA 的插件就是 IDEA 的一大灵魂所在,这点事无法否认的事实。 178 | 179 | ## 必备技巧 180 | 181 | ### 源码阅读 182 | 183 | 在 [真香!用 IDEA 神器看源码,效率真高!](./source-code-reading-skills.md) 这篇文章中,我介绍了自己平时看源码的时候常用的快捷键/小技巧!非常好用! 184 | 185 | ![IDEA源码阅读技巧](https://oss.javaguide.cn/github/awesome-idea-tutorial/8a9024040e8c431796aa5427efcf35e5.png) 186 | 187 | 掌握这些快捷键/小技巧,使用 IDEA 看源码的效率提升一个等级! 188 | 189 | ### 快速创建包/文件夹 190 | 191 | Java中的包是一种组织类和接口的机制,用于将相关的类和接口组织在一起。日常开发时,我们想要新建 Java 类时,考虑到项目的包目录划分可能需要新建一个包。 192 | 193 | 在 IDEA 中创建 Java 类时,是可以直接顺带创建包目录的,具体操作如下。 194 | 195 | 在创建 Java 类时,直接写出包目录名称通过 `.` 拼接即可,如下图新建 Java 类时填上 `com.example.helloworld`, 196 | 197 | ![创建新包](https://oss.javaguide.cn/idea/plugins/idea-create-new-package.png) 198 | 199 | 快速创建文件夹的方式跟快速创建包目录差不多,只不过将 `.` 拼接改为 `/` 即可,如下图新建文件时填上 `folder/new-folder`, 200 | 201 | ![创建新目录](https://oss.javaguide.cn/idea/plugins/idea-create-new-dir.png) 202 | 203 | ### 快速复制类代码生成 Java 类 204 | 205 | 对于完整的类代码,我们直接复制粘贴到包下即可生成对应的 Java 类,不需要再手动创建对应的类。 206 | 207 | 假如我们要把下面的类复制到项目里的话: 208 | 209 | ```java 210 | public class MyClass { 211 | int aInteger; 212 | double bDouble; 213 | 214 | public MyClass(int myAIntegerParam, double myBDoubleParam) { 215 | aInteger = myAIntegerParam; 216 | bDouble = myBDoubleParam; 217 | } 218 | } 219 | ``` 220 | 221 | 直接复制然后再对应包下粘贴即可: 222 | 223 | ![](https://oss.javaguide.cn/idea/tips/quickly-copy-class-code-to-generate-java-class.png) 224 | 225 | ### 多实例启动 226 | 227 | 日常开发过程中,我们可能需要用到多实例启动,也就是在本地同时启动多个同一服务。 228 | 229 | Run=> Edit Configurations=> 选中项目=> 选中“Allow parallel run”。 230 | 231 | ![idea-allow-parallel-run](https://oss.javaguide.cn/idea/tips/idea-allow-parallel-run.jpg) 232 | 233 | 这是2022之前版本的方法,2022及之后的版本方式有所改变。 234 | 235 | Run=> Edit Configurations=> 选中项目=> “Build and run”栏=> Modify Options=> 选中“Allow multiple instances” 236 | 237 | ![](https://oss.javaguide.cn/idea/tips/idea-allow-multiple-instances.png) 238 | 239 | -------------------------------------------------------------------------------- /docs/tips/plug-in-development-intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IDEA 插件开发入门 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 教程 7 | - 插件开发 8 | --- 9 | 10 | 我这个人没事就喜欢推荐一些好用的 [IDEA 插件](https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1319419426898329600&__biz=Mzg2OTA0Njk0OA==#wechat_redirect)给大家。这些插件极大程度上提高了我们的生产效率以及编码舒适度。 11 | 12 | **不知道大家有没有想过自己开发一款 IDEA 插件呢?** 13 | 14 | 我自己想过,但是没去尝试过。刚好有一位读者想让我写一篇入门 IDEA 开发的文章,所以,我在周末就花了一会时间简单了解一下。 15 | 16 | ![](https://oss.javaguide.cn/2020-11/image-20201118071711216.png) 17 | 18 | 不过,**这篇文章只是简单带各位小伙伴入门一下 IDEA 插件开发**,个人精力有限,暂时不会深入探讨太多。如果你已经有 IDEA 插件开发的相关经验的话,这篇文章就可以不用看了,因为会浪费你 3 分钟的时间。 19 | 20 | 好的废话不多说!咱们直接开始! 21 | 22 | ## 01 新建一个基于 Gradle 的插件项目 23 | 24 | 这里我们基于 Gradle 进行插件开发,这也是 IntelliJ 官方的推荐的插件开发解决方案。 25 | 26 | **第一步,选择 Gradle 项目类型并勾选上相应的依赖。** 27 | 28 | ![选择 Gradle 项目类型并勾选上相应的依赖](https://oss.javaguide.cn/2020-11/1.png) 29 | 30 | **第二步,填写项目相关的属性比如 GroupId、ArtifactId。** 31 | 32 | ![填写项目相关的属性](https://oss.javaguide.cn/2020-11/2.png) 33 | 34 | **第三步,静静等待项目下载相关依赖。** 35 | 36 | 第一次创建 IDEA 插件项目的话,这一步会比较慢。因为要下载 IDEA 插件开发所需的 SDK 。 37 | 38 | ## 02 插件项目结构概览 39 | 40 | 新建完成的项目结构如下图所示。 41 | 42 | ![插件项目结构概览](https://oss.javaguide.cn/2020-11/%E6%8F%92%E4%BB%B6%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E6%A6%82%E8%A7%88.png) 43 | 44 | 这里需要额外注意的是下面这两个配置文件。 45 | 46 | **`plugin.xml`: 插件的核心配置文件。通过它可以配置插件名称、插件介绍、插件作者信息、Action 等信息。** 47 | 48 | ```xml 49 | 50 | github.javaguide.my-first-idea-plugin 51 | 52 | Beauty 53 | 54 | JavaGuide 55 | 56 | 58 | 这尼玛是什么垃圾插件!!! 59 | ]]> 60 | 61 | 63 | com.intellij.modules.platform 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | ``` 74 | 75 | **`build.gradle`: 项目依赖配置文件。通过它可以配置项目第三方依赖、插件版本、插件版本更新记录等信息。** 76 | 77 | ```groovy 78 | plugins { 79 | id 'java' 80 | id 'org.jetbrains.intellij' version '0.6.3' 81 | } 82 | 83 | group 'github.javaguide' 84 | // 当前插件版本 85 | version '1.0-SNAPSHOT' 86 | 87 | repositories { 88 | mavenCentral() 89 | } 90 | 91 | // 项目依赖 92 | dependencies { 93 | testCompile group: 'junit', name: 'junit', version: '4.12' 94 | } 95 | 96 | // See https://github.com/JetBrains/gradle-intellij-plugin/ 97 | // 当前开发该插件的 IDEA 版本 98 | intellij { 99 | version '2020.1.2' 100 | } 101 | patchPluginXml { 102 | // 版本更新记录 103 | changeNotes """ 104 | Add change notes here.
105 | most HTML tags may be used""" 106 | } 107 | ``` 108 | 109 | 没有开发过 IDEA 插件的小伙伴直接看这两个配置文件内容可能会有点蒙。所以,我专门找了一个 IDEA 插件市场提供的现成插件来说明一下。小伙伴们对照下面这张图来看下面的配置文件内容就非常非常清晰了。 110 | 111 | ![插件信息](https://oss.javaguide.cn/2020-11/iShot2020-11-13%2016.15.53.png) 112 | 113 | 这就非常贴心了!如果这都不能让你点赞,我要这文章有何用! 114 | 115 | ## 03 手动创建 Action 116 | 117 | 我们可以把 Action 看作是 IDEA 提供的事件响应处理器,通过 Action 我们可以自定义一些事件处理逻辑/动作。比如说你点击某个菜单的时候,我们进行一个展示对话框的操作。 118 | 119 | **第一步,右键 `java` 目录并选择 new 一个 Action** 120 | 121 | ![]() 122 | 123 | **第二步,配置 Action 相关信息比如展示名称。** 124 | 125 | ![配置动作属性 (1)]() 126 | 127 | 创建完成之后,我们的 `plugin.xml` 的 ``节点下会自动生成我们刚刚创建的 Action 信息: 128 | 129 | ```xml 130 | 131 | 132 | 133 | 134 | 135 | 136 | ``` 137 | 138 | 并且 `java` 目录下会生成一个叫做 `HelloAction` 的类。这个类继承了 `AnAction` ,并覆盖了 `actionPerformed()` 方法。这个 `actionPerformed` 方法就好比 JS 中的 `onClick` 方法,会在你点击的时候触发对应的动作。 139 | 140 | 我简单对 `actionPerformed` 方法进行了修改,添加了一行代码。这行代码很简单,就是显示 1 个对话框并展示一些信息。 141 | 142 | ```java 143 | public class HelloAction extends AnAction { 144 | 145 | @Override 146 | public void actionPerformed(AnActionEvent e) { 147 | //显示对话框并展示对应的信息 148 | Messages.showInfoMessage("素材不够,插件来凑!", "Hello"); 149 | } 150 | } 151 | 152 | ``` 153 | 154 | 另外,我们上面也说了,每个动作都会归属到一个 Group 中,这个 Group 可以简单看作 IDEA 中已经存在的菜单。 155 | 156 | 举个例子。我上面创建的 Action 的所属 Group 是 **ToolsMenu(Tools)** 。这样的话,我们创建的 Action 所在的位置就在 Tools 这个菜单下。 157 | 158 | ![](https://oss.javaguide.cn/2020-11/image-20201113192255689.png) 159 | 160 | 再举个例子。加入我上面创建的 Action 所属的 Group 是**MainMenu** (IDEA 最上方的主菜单栏)下的 **FileMenu(File)** 的话。 161 | 162 | ```xml 163 | 164 | 165 | 166 | 167 | 168 | 169 | ``` 170 | 171 | 我们创建的 Action 所在的位置就在 File 这个菜单下。 172 | 173 | ![](https://oss.javaguide.cn/2020-11/image-20201113201634643.png) 174 | 175 | ## 04 验收成果 176 | 177 | 点击 `Gradle -> Tasks -> intellij -> runIde` 就会启动一个默认了这个插件的 IDEA。然后,你可以在这个 IDEA 上实际使用这个插件了。 178 | 179 | ![点击 runIde 就会启动一个默认了这个插件的 IDEA](https://oss.javaguide.cn/2020-11/image-20201118075912490.png) 180 | 181 | 效果如下: 182 | 183 | ![点击 runIde 就会启动一个默认了这个插件的 IDEA](https://oss.javaguide.cn/2020-11/image-20201118080358764.png) 184 | 185 | 我们点击自定义的 Hello Action 的话就会弹出一个对话框并展示出我们自定义的信息。 186 | 187 | ![IDEA 插件HelloWorld](https://oss.javaguide.cn/2020-11/IDEA%E6%8F%92%E4%BB%B6HelloWorld.png) 188 | 189 | ## 05 完善一下 190 | 191 | 想要弄点界面花里胡哨一下, 我们还可以通过 Swing 来写一个界面。 192 | 193 | 这里我们简单实现一个聊天机器人。代码的话,我是直接参考的我大二刚学 Java 那会写的一个小项目(_当时写的代码实在太烂了!就很菜!_)。 194 | 195 | ![](https://oss.javaguide.cn/2020-11/image-20201114100213337.png) 196 | 197 | 首先,你需要在[图灵机器人官网](http://www.tuling123.com/ "图灵机器人官网")申请一个机器人。(_其他机器人也一样,感觉这个图灵机器人没有原来好用了,并且免费调用次数也不多_) 198 | 199 | ![](https://oss.javaguide.cn/2020-11/image-20201118075453172.png) 200 | 201 | 然后,简单写一个方法来请求调用机器人。由于代码比较简单,我这里就不放出来了,大家简单看一下效果就好。 202 | 203 | ![](https://oss.javaguide.cn/2020-11/image-20201118075803163.png) 204 | 205 | ## 06 打包分发 206 | 207 | 插件写好之后,如果我们想把插件分享给小伙伴使用的话要怎么做呢。 208 | 209 | ### 首先,我们要打包插件 210 | 211 | 执行 Gradle -> Tasks -> intellij -> buildPlugin 212 | 213 | 执行完成后,项目中会生成一个 build 文件夹,点击进入后找到 distributions 文件夹,里面会出现一个 .zip 结尾的压缩包,里面打包了插件所需要的依赖、配置文件等。 214 | 215 | ### 其次,分发插件 216 | 217 | 打开 IDEA,在 Settings -> Plugins -> 点击小齿轮后选择 Install Plugin From Disk 218 | 219 | ![install-plugin-from-disk](./assets/install-plugin-from-disk.png) 220 | 221 | ### 最后,提交至官网 222 | 223 | 这步并不是必须的,如果你想把你的插件发布到官网上,别人直接可以在 [应用市场](https://plugins.jetbrains.com/) 中搜到你的插件的话可以做这步。 224 | 225 | ## 07 深入学习 226 | 227 | 如果你想要深入学习的 IDEA 插件的话,可以看一下 [官网文档](https://jetbrains.org/intellij/sdk/docs/basics/basics.html)。 228 | 229 | 这方面的资料还是比较少的。除了官方文档的话,你还可以简单看看下面这几篇文章: 230 | 231 | - [8 条经验轻松上手 IDEA 插件开发](https://developer.aliyun.com/article/777850?spm=a2c6h.12873581.0.dArticle777850.118d6446r096V4&groupCode=alitech "8 条经验轻松上手 IDEA 插件开发") 232 | - [IDEA 插件开发入门教程](https://blog.xiaohansong.com/idea-plugin-development.html "IDEA 插件开发入门教程") 233 | 234 | ## 08 后记 235 | 236 | 我们开发 IDEA 插件主要是为了让 IDEA 更加好用,比如有些框架使用之后可以减少重复代码的编写、有些主题类型的插件可以让你的 IDEA 更好看。 237 | 238 | 我这篇文章的这个案例说实话只是为了让大家简单入门一下 IDEA 开发,没有任何实际应用意义。**如果你想要开发一个不错的 IDEA 插件的话,还要充分发挥想象,利用 IDEA 插件平台的能力。** 239 | 240 | ## 常见问题一: JDK 版本过低 241 | 242 | 创建好项目之后,运行 Gradle,出现如下报错 243 | 244 | ``` 245 | FAILURE: Build failed with an exception. 246 | 247 | * What went wrong: 248 | A problem occurred configuring root project 'string-template-error-scanner'. 249 | > Could not resolve all artifacts for configuration ':classpath'. 250 | > Could not resolve org.jetbrains.intellij.plugins:gradle-intellij-plugin:1.4.0. 251 | Required by: 252 | project: > org.jetbrains.intellij:org.jetbrains.intellij.gradle.plugin:1.4.0 253 | > Unable to find a matching variant of org.jetbrains.intellij.plugins:gradle-intellij-plugin:1.4.0: 254 | - Variant 'apiElements' capability org.jetbrains.intellij.plugins:gradle-intellij-plugin:1.4.0: 255 | - Incompatible attributes: 256 | - Required org.gradle.jvm.version '8' and found incompatible value '11'. 257 | - Required org.gradle.usage 'java-runtime' and found incompatible value 'java-api'. 258 | - Other attributes: 259 | - Found org.gradle.category 'library' but wasn't required. 260 | - Required org.gradle.dependency.bundling 'external' and found compatible value 'external'. 261 | - Found org.gradle.jvm.environment 'standard-jvm' but wasn't required. 262 | - Required org.gradle.libraryelements 'jar' and found compatible value 'jar'. 263 | - Found org.gradle.status 'release' but wasn't required. 264 | - Found org.jetbrains.kotlin.platform.type 'jvm' but wasn't required. 265 | - Variant 'runtimeElements' capability org.jetbrains.intellij.plugins:gradle-intellij-plugin:1.4.0: 266 | - Incompatible attribute: 267 | - Required org.gradle.jvm.version '8' and found incompatible value '11'. 268 | - Other attributes: 269 | - Found org.gradle.category 'library' but wasn't required. 270 | - Required org.gradle.dependency.bundling 'external' and found compatible value 'external'. 271 | - Found org.gradle.jvm.environment 'standard-jvm' but wasn't required. 272 | - Required org.gradle.libraryelements 'jar' and found compatible value 'jar'. 273 | - Found org.gradle.status 'release' but wasn't required. 274 | - Required org.gradle.usage 'java-runtime' and found compatible value 'java-runtime'. 275 | - Found org.jetbrains.kotlin.platform.type 'jvm' but wasn't required. 276 | 277 | * Try: 278 | Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. 279 | 280 | * Get more help at https://help.gradle.org 281 | 282 | BUILD FAILED in 94ms 283 | ``` 284 | 285 | > 原因分析: 一般情况下,我们都是使用 JDK8 进行开发,但是新版的 IDEA 插件的编译需要使用 JAVA11 版本以上,因此要把 JDK8 换成 JDK11。(设置方法: 左上角点击 Settings -> Build, Execution, Deployment, Build Tools -> Gradle,在下面找到 Gradle JVM: 改成 Java11 再次运行 Gradle 即可) 286 | 287 | ## 常见问题二: 无法创建 org.jetbrains.intellij.utils.ArchiveUtils 的实例 288 | 289 | ``` 290 | Build file 'D:\project\string-template-error-scanner\build.gradle' line: 3 291 | 292 | An exception occurred applying plugin request [id: 'org.jetbrains.intellij', version: '1.4.0'] 293 | > Failed to apply plugin [id 'org.jetbrains.intellij'] 294 | > Could not create an instance of type org.jetbrains.intellij.utils.ArchiveUtils. 295 | > Could not generate a decorated class for type ArchiveUtils. 296 | > org/gradle/api/file/ArchiveOperations 297 | 298 | ``` 299 | 300 | > 原因分析: 这个问题我在 StackOverFlow、CSDN 等等网站搜了一大圈都从根源上找到怎么解决(知道的小伙伴可以编辑此页和我说一下~) 301 | > 302 | > 最后通过修改 `build.gradle` 中 org.jetbrains.intellij 的版本解决的,我创建好项目之后版本是 1.4.0,换成 0.6.3,再重新运行一次 Gradle 就可以了 303 | -------------------------------------------------------------------------------- /docs/tips/refractor-intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IDEA 重构入门 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 插件 7 | - 重构入门 8 | --- 9 | 10 | 我们在使用 IDEA 进行重构之前,先介绍一个方便我们进行重构的快捷键: `Ctrl+t(Mac)/Ctrl+Shift+Alt+T`(如果忘记快捷键的话,鼠标右键也能找到重构选项),使用这个快捷键可以快速调出常用重构的选项,如下图所示: 11 | 12 | ![](./assets/refractor-help.png) 13 | 14 | ## 重命名(rename) 15 | 16 | 快捷键: `Shift + F6(Mac) / Shift + F6(Windows/Linux):` 对类、变量或者方法名重命名。 17 | 18 | ![重命名](./assets/rename.gif) 19 | 20 | ## 提取相关重构手段 21 | 22 | 这部分的快捷键实际很好记忆,我是这样记忆的: 23 | 24 | 前面两个键位是 `Command (⌘) + Option(⌥) (Mac) / Ctrl + Alt (Windows/Linux)` 是固定的,只有后面一个键位会变比如 Extract constant (提取变量)就是 c(constant)、Extract variable (提取变量)就是 v(variable)。 25 | 26 | ### 提取常量(extract constant) 27 | 28 | 1. **使用场景**: 提取未经过定义就直接出现的常量。提取常量使得你的编码更易读,避免硬编码。 29 | 2. **快捷键** : `Command (⌘) + Option(⌥) + c(Mac)/ Ctrl + Alt + c(Windows/Linux)` 30 | 31 | **示例:** 32 | 33 | ![](./assets/exact/extract-constant.gif) 34 | 35 | ### 提取参数(exact parameter) 36 | 37 | 1. **使用场景** : 提取参数到方法中。 38 | 2. **快捷键** :`Command (⌘) + Option(⌥) + p(Mac)/ Ctrl + Alt + P(Windows/Linux)` 39 | 40 | ![](./assets/exact/exact-parameter.gif) 41 | 42 | ### 提取变量(exact variable) 43 | 44 | 1. **使用场景**: 提取多次出现的表达式。 45 | 2. **快捷键:** `Command (⌘) + Option(⌥) + v(Mac) / Ctrl + Alt + V(Windows/Linux)` 46 | 47 | **示例:** 48 | 49 | ![](./assets/exact/exact-variable.gif) 50 | 51 | ### 提取属性(exact field) 52 | 53 | 1. **使用场景**: 把当前表达式提取成为类的一个属性。 54 | 2. **快捷键:** `Command (⌘) + Option(⌥) + F(Mac) / Ctrl + Alt + F(Windows/Linux)` 55 | 56 | **示例:** 57 | 58 | ![](./assets/exact/exact-field.gif) 59 | 60 | **示例:** 61 | 62 | ![](./assets/exact/exact-variable.gif) 63 | 64 | ### 提取方法(exact method) 65 | 66 | 1. **使用场景**: 1 个或者多个表达式可以提取为一个方法。 提取方法也能使得你的编码更易读,更加语义化。 67 | 2. **快捷键:** `Command (⌘) + Option(⌥) + M(Mac)/ Ctrl + Alt + M(Windows/Linux)` 68 | 69 | **示例:** 70 | 71 | ![](./assets/exact/exact-method.gif) 72 | 73 | ### 提取接口(exact interface) 74 | 75 | 1. **使用场景**: 想要把一个类中的 1 个或多个方法提取到一个接口中的时候。 76 | 2. **快捷键:** `Command (⌘) + Option(⌥) + M(Mac)/ Ctrl + Alt + M(Windows/Linux)` 77 | 78 | **示例:** 79 | 80 | ![](./assets/exact/exact-interface.gif) 81 | -------------------------------------------------------------------------------- /docs/tips/source-code-reading-skills.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IDEA 源码阅读技巧 3 | category: IDEA 指南 4 | tag: 5 | - IDEA 6 | - IDEA 插件 7 | - 源码阅读技巧 8 | --- 9 | 10 | 项目有个新来了一个小伙伴,他看我查看项目源代码的时候,各种骚操作“花里胡哨”的。于是他向我请教,想让我分享一下我平时使用 IDEA 看源码的小技巧。 11 | 12 | ## 基本操作 13 | 14 | 这一部分的内容主要是一些我平时看源码的时候常用的快捷键/小技巧!非常好用! 15 | 16 | 掌握这些快捷键/小技巧,看源码的效率提升一个等级! 17 | 18 | ### 查看当前类的层次结构 19 | 20 | | 使用频率 | 相关快捷键 | 21 | | ---------- | ---------- | 22 | | ⭐⭐⭐⭐⭐ | `Ctrl + H` | 23 | 24 | 平时,我们阅读源码的时候,经常需要查看类的层次结构。就比如我们遇到抽象类或者接口的时候,经常需要查看其被哪些类实现。 25 | 26 | 拿 Spring 源码为例,`BeanDefinition` 是一个关于 Bean 属性/定义的接口。 27 | 28 | ```java 29 | public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement { 30 | ...... 31 | } 32 | ``` 33 | 34 | 如果我们需要查看 `BeanDefinition` 被哪些类实现的话,只需要把鼠标移动到 `BeanDefinition` 类名上,然后使用快捷键 `Ctrl + H` 即可。 35 | 36 | ![](https://oss.javaguide.cn/idea/20210527135533686.png) 37 | 38 | 同理,如果你想查看接口 `BeanDefinition` 继承的接口 `AttributeAccessor` 被哪些类实现的话,只需要把鼠标移动到 `AttributeAccessor` 类名上,然后使用快捷键 `Ctrl + H` 即可。 39 | 40 | ### 查看类结构 41 | 42 | | 使用频率 | 相关快捷键 | 43 | | -------- | ------------------------------------- | 44 | | ⭐⭐⭐⭐ | `Alt + 7`(Win) / `Command +7` (Mac) | 45 | 46 | 类结构可以让我们快速了解到当前类的方法、变量/常量,非常使用! 47 | 48 | 我们在对应的类的任意位置使用快捷键 `Alt + 7`(Win) / `Command +7` (Mac)即可。 49 | 50 | ![](https://oss.javaguide.cn/idea/20210527135552183.png) 51 | 52 | ### 快速检索类 53 | 54 | | 使用频率 | 相关快捷键 | 55 | | ---------- | ---------------------------------------- | 56 | | ⭐⭐⭐⭐⭐ | `Ctrl + N` (Win) / `Command + ○` (Mac) | 57 | 58 | 使用快捷键 `Ctrl + N` (Win) / `Command + ○` (Mac)可以快速检索类/文件。 59 | 60 | ![](https://oss.javaguide.cn/idea/20210527135629367.png) 61 | 62 | ### 关键字检索 63 | 64 | | 使用频率 | 相关快捷键 | 65 | | ---------- | ---------- | 66 | | ⭐⭐⭐⭐⭐ | 见下文 | 67 | 68 | - 当前文件下检索: `Ctrl + F` (Win) / `Command + F` (Mac) 69 | - 全局的文本检索: `Ctrl + Shift + F` (Win) / `Command + Shift + F` (Mac) 70 | 71 | ### 查看方法/类的实现类 72 | 73 | | 使用频率 | 相关快捷键 | 74 | | -------- | -------------------------------------------------- | 75 | | ⭐⭐⭐⭐ | `Ctrl + Alt + B` (Win) / `Command + Alt + B` (Mac) | 76 | 77 | 如果我们想直接跳转到某个方法/类的实现类,直接在方法名或者类名上使用快捷键 `Ctrl + Alt + B/鼠标左键` (Win) / `Command + Alt + B/鼠标左键` (Mac) 即可。 78 | 79 | 如果对应的方法/类只有一个实现类的话,会直接跳转到对应的实现类。 80 | 81 | 比如 `BeanDefinition` 接口的 `getBeanClassName()` 方法只被 `AbstractBeanDefinition` 抽象类实现,我们对这个方法使用快捷键就可以直接跳转到 `AbstractBeanDefinition` 抽象类中对应的实现方法。 82 | 83 | ```java 84 | public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement { 85 | @Nullable 86 | String getBeanClassName(); 87 | ...... 88 | } 89 | ``` 90 | 91 | 如果对应的方法/类有多个实现类的话,IDEA 会弹出一个选择框让你选择。 92 | 93 | 比如 `BeanDefinition` 接口的 `getParentName()` 方法就有多个不同的实现。 94 | 95 | ![](https://oss.javaguide.cn/idea/20210527135703164.png) 96 | 97 | ### 查看方法被使用的情况 98 | 99 | | 使用频率 | 相关快捷键 | 100 | | -------- | ---------- | 101 | | ⭐⭐⭐⭐ | `Alt + F7` | 102 | 103 | 我们可以通过直接在方法名上使用快捷键 `Alt + F7` 来查看这个方法在哪些地方被调用过。 104 | 105 | ![](https://oss.javaguide.cn/idea/20210527135712962.png) 106 | 107 | ### 查看最近使用的文件 108 | 109 | | 使用频率 | 相关快捷键 | 110 | | ---------- | -------------------------------------- | 111 | | ⭐⭐⭐⭐⭐ | `Ctrl + E`(Win) / `Command +E` (Mac) | 112 | 113 | 你可以通过快捷键 `Ctrl + E`(Win) / `Command +E` (Mac)来显示 IDEA 最近使用的一些文件。 114 | 115 | ![](https://oss.javaguide.cn/idea/20210527135733816.png) 116 | 117 | ### 查看图表形式的类继承链 118 | 119 | | 使用频率 | 相关快捷键 | 120 | | -------- | ------------------------ | 121 | | ⭐⭐⭐⭐ | 相关快捷键较多,不建议记 | 122 | 123 | 点击类名 **右键** ,选择 **Shw Diagrams** 即可查看图表形式的类继承链。 124 | 125 | ![](https://oss.javaguide.cn/idea/20210527135745518.png) 126 | 127 | 你还可以对图表进行一些操作。比如,你可以点击图表中具体的类 **右键**,然后选择显示它的实现类或者父类。 128 | 129 | ![](https://oss.javaguide.cn/idea/20210527135757163.png) 130 | 131 | 再比如你还可以选择是否显示类中的属性、方法、内部类等等信息。 132 | 133 | ![](https://oss.javaguide.cn/idea/20210527135902827.png) 134 | 135 | 如果你想跳转到对应类的源码的话,直接点击图表中具体的类 **右键** ,然后选择 **Jump to Source** 。 136 | 137 | ![](https://oss.javaguide.cn/idea/20210527135807668.png) 138 | 139 | ## 插件推荐 140 | 141 | ### 一键生成方法的序列图 142 | 143 | **序列图**(Sequence Diagram),亦称为**循序图**,是一种 UML 行为图。表示系统执行某个方法/操作(如登录操作)时,对象之间的顺序调用关系。 144 | 145 | 这个顺序调用关系可以这样理解: 你需要执行系统中某个对象 a 提供的方法/操作 login(登录),但是这个对象又依赖了对象 b 提供的方法 getUser(获取用户)。因此,这里就有了 a -> b 调用关系之说。 146 | 147 | 我们可以通过 **SequenceDiagram** 这个插件一键生成方法的序列图。 148 | 149 | > 如果你因为网络问题没办法使用 IDEA 自带的插件市场的话,也可以通过 IDEA 插件市场的官网手动下载安装。 150 | 151 | ![](https://oss.javaguide.cn/idea/2021052218304014.png) 152 | 153 | **如何使用呢?** 154 | 155 | 1、选中方法名(注意不要选类名),然后点击鼠标右键,选择 **Sequence Diagram** 选项即可! 156 | 157 | ![](https://oss.javaguide.cn/idea/20201021170110697.png) 158 | 159 | 2、配置生成的序列图的一些基本的参数比如调用深度之后,我们点击 ok 即可! 160 | 161 | ![](https://oss.javaguide.cn/idea/c5040f1105c762ddf8689892913bc02d.png) 162 | 163 | 3、你还可以通过生成的时序图来定位到相关的代码,这对于我们阅读源码的时候尤其有帮助! 164 | 165 | ![](https://oss.javaguide.cn/idea/20201021171623809.png) 166 | 167 | 4、时序图生成完成之后,你还可以选择将其导出为图片。 168 | 169 | ![](https://oss.javaguide.cn/idea/20201021170228723.png) 170 | 171 | 相关阅读: [《安利一个 IDEA 骚操作:一键生成方法的序列图》](https://mp.weixin.qq.com/s/SG1twZczqdup_EQAOmNERg) 。 172 | 173 | ### 项目代码统计 174 | 175 | 为了快速分析项目情况,我们可以对项目的 **代码的总行数、单个文件的代码行数、注释行数等信息进行统计。** 176 | 177 | **Statistic** 这个插件来帮助我们实现这一需求。 178 | 179 | ![](https://oss.javaguide.cn/idea/20210522183550110.png) 180 | 181 | 有了这个插件之后你可以非常直观地看到你的项目中所有类型的文件的信息比如数量、大小等等,可以帮助你更好地了解你们的项目。 182 | 183 | ![](https://oss.javaguide.cn/idea/20210522183616310.png) 184 | 185 | 你还可以使用它看所有类的总行数、有效代码行数、注释行数、以及有效代码比重等等这些东西。 186 | 187 | ![](https://oss.javaguide.cn/idea/20210522183630459.png) 188 | 189 | 如果,你担心插件过多影响 IDEA 速度的话,可以只在有代码统计需求的时候开启这个插件,其他时间禁用它就完事了! 190 | 191 | 相关阅读: [快速识别烂项目!试试这款项目代码统计 IDEA 插件](https://mp.weixin.qq.com/s/fVEeMW6elhu79I-rTZB40A) 192 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "awesome-idea", 3 | "version": "1.0.0", 4 | "repository": "git@github.com:CodingDocs/awesome-idea.git", 5 | "author": "Guide", 6 | "license": "MIT", 7 | "scripts": { 8 | "docs:build": "vuepress build docs", 9 | "docs:clean-dev": "vuepress dev docs --clean-cache", 10 | "docs:dev": "vuepress dev docs", 11 | "docs:update": "pnpm dlx vp-date" 12 | }, 13 | "devDependencies": { 14 | "@vuepress/bundler-vite": "2.0.0-rc.15", 15 | "@vuepress/plugin-feed": "2.0.0-rc.47", 16 | "nodejs-jieba": "0.1.2", 17 | "sass-embedded": "^1.79.3", 18 | "vue": "^3.5.8", 19 | "vuepress": "2.0.0-rc.15", 20 | "vuepress-plugin-search-pro": "2.0.0-rc.54", 21 | "vuepress-theme-hope": "2.0.0-rc.56" 22 | }, 23 | "packageManager": "pnpm@9.11.0" 24 | } 25 | --------------------------------------------------------------------------------