本文也是记录一下 IDEA 支持 WSL、SSH、Docker 运行 这个新特性的体验,这是我一直想要的功能。不用进行过多设置就让代码 Run 起来, 而且还支持断点 Debug,跟本地启动一样,不过功能还有待改进。
本来是说不要随便更新 IDEA 的了,但看到 IDEA 新版本特性后,果断、立马点击了更新,然后更新到 IDEA 2021.3 也挺久了,不过最近比较忙(主要是因为懒),所以也没有好好进行体验一下这些新功能。
先来说一下日常的使用的体验:
- 启动界面是越来越花里胡哨的了,功能也是越来越花里胡哨的了
- 更新完成后部分插件也要更新,不然旧版插件不支持新版
- 目前还没有遇到什么坑
- Run/Debug Configuration 的配置不像以前那样明显易用
新版的主要更新内容
- Space 集成:(我公司团队不用这个,我自己一个人也用不到这个,忽略)
- 支持 Java 16 :(打扰了,日常用着 8 和 11,先不体验吧)
- 更好的 Git 支持:日常合代码都是直接用 IDEA 的
- Windows 任务更好的支持:我觉得没有必要,固定任务栏直接启动也挺快的啦
- Code With Me:感觉带妹子学 Java 的话,这是个特别棒的功能
- 支持 WSL、SSH、Docker 运行:就是看着这个特性而升级的,不过社区版不支持这个功能
自从 VS Code 支持 Remote 之后,我日常要在开发服务器写一些脚本、跑一些脚本的时候,都是直接使用 VS Code SSH 连接服务器的,感觉超级方便(哈哈哈 我还是用不习惯 vim)。所以一直想 IDEA 也可以支持 Remote、WSL。
1
开始之前
- 环境和软件:Windows 10 , WSL 2,Docker for Windows,OpenJDK 11,IDEA 2021.3 Ultimate
- 项目 1:一个普通的 Java 项目,写了一个 Hell World 的 class
- 项目 2:Gradle 构建的 Spring Boot Web, 写了一个 RESTful API
总体的代码都比较简单,就不放源码了。
设置入口:设置 WSL、SSH、Docker 运行的入口在 Run/Debug Configuration 里,默认是 Local machine 跟以前的本地运行一样。
设置 Run On
2
使用 WSL 运行
WSL 1 不太清楚是否支持,我这里用的是 WSL 2 。
首先需要在 WSL 里安装 JDK 和设置一下 JAVA_HOME,设置入口见上面,新建 WSL 的 Run On 环境,选择好你的 WSL 发行版,如果出现绿色的 successfully 表示可以使用这个 WSL。
选择 WSL 发行版
如果还需要其他运行参数,比如你可以在这里设置 JAVA_HOME ,在接下来的界面设置一下即可
额外的一些配置
设置完成后,选择 WSL ,就可以和在本地一样 Run/Debug 。
3
使用 SSH 在远程环境运行
这个总体体验很不好,每次运行都要上传一堆依赖的 jar 包,不知道是不是我没有配置好 rsync 还是没有优化好。还有一个待优化的点是最好可以手动选择 SSH 还是 Password 的方式登录。而不是要像下图那样子需要先自己配置一下:
- 没有使用 rsync 的话,每次所有的 class 和依赖的 jar 都要上传
- 使用 rsync 后,像 Gradle、Maven 引入的依赖每次还是要上传
如果使用 SSH 方式登录的话,需要先配置一下 SSH,然后再在 Run On 里选择新建一个 SSH Run Target:
新建 Run Target,选择 New,或者 Existing 也就是上面配置的 SSH:
Existing 是表示已经配置好的 SSH
设置 JAVA_HOME 和在远程服务器的目录:
选择远程目录
这样子配置好之后,就可以像本地一样正常的 Run 和 Debug。
IntelliJ IDEA 2021.1 最新变化
IntelliJ IDEA 2021.1 引入 Java 16 和 WSL 2 支持、Space 集成、Code With Me、IDE 内部的 HTML 预览窗口、在 SSH 主机和 Docker 容器中运行代码的选项以及其他实用更新。您可以观看这段视频概览或继续阅读,详细了解最重要的变化!
下载
简要导览
Space 集成
PreviousNext
Space 集成
与 Space 集成,我们新的软件开发和团队协作平台,现在可以开箱即用。您可以通过欢迎屏幕上的 Get from VCS 连接到 JetBrains Space 中的组织。登录后,您可以查看和克隆项目仓库,检查队友的代码以及编写 Space Automation 脚本。
WSL 2 支持
UX 外部依赖项
Java 项目 WSL 2 支持
我们知道您一直在期待这次更新!现在,您可以在 IntelliJ IDEA 中使用 WSL 2 中的 Java 项目。IDE 可以检测 JDK 安装、安装 JDK、编译和运行 Maven 和 Gradle 项目以及使用 IntelliJ IDEA 构建系统的项目。
协作开发
Space 集成
Code With Me,一项用于协作开发和结对编程的新服务,已在 IntelliJ IDEA 中开箱即用。它还具有视频和语音通话功能,让远程协作更上一层楼。无论您何时想与同事交流,都可以直接从 JetBrains IDE 中发起音频和视频通话。Code With Me 完美匹配 1:1 会议和小组会议,您可以邀请数十人参与。要详细了解这些更新,请阅读我们的博文。
运行目标
Space 集成
Run Targets 功能允许您在 Docker 容器或远程机器上运行、测试、分析和调试应用程序。IntelliJ IDEA Ultimate 目前允许您在 Docker、SSH 和 WSL 目标上运行 Java 应用程序、JUnit 测试以及 Maven、Gradle、Micronaut、基于 Maven 的 Quarkus 和 Spring Boot 项目。更多信息,请查看此博文。
用户体验
编辑器 HTML 预览
内置 HTML 预览
新的内置浏览器预览可以让您快速预览 HTML 文件。在编辑器右上角,点击微件中带有 IntelliJ IDEA 徽标的图标即可将其打开。您如果在 HTML 中进行了更改,或者改变了链接的 CSS 和 JavaScript 文件,则预览将即时更新。
UX 外部依赖项
在搜索范围内自定义外部依赖项
我们已经使搜索范围更易于自定义。您可以将 External Dependencies 设置为包含在范围中或从范围中排除。转到 Preferences/Settings | Appearance & Behavior | Scopes,使用右侧按钮更改 External Dependencies 的状态。
HPROF 内存查看器
在 Windows 上快速访问最近的项目
我们更新了对 Windows 跳转列表的支持,现在,右键点击任务栏或开始菜单上的 IntelliJ IDEA 图标即可打开您最近的项目。
改进了辅助功能
我们的一大关键任务是让所有用户都能不受阻碍地使用我们的 IDE。在这个版本中,我们为欢迎屏幕、Project Structure 视图和 VCS 日志中的 UI 元素添加了更多标签。启用屏幕阅读器后,现在可以正确读出这些元素以及间距图标。我们也在努力改善对 macOS 用户的辅助功能支持。
在 Windows 中将高对比度模式与 IDE 主题同步
如果您在 Windows 上使用了高对比度模式,当您第一次启动 IDE 时,您的 IDE 将自动应用高对比度主题。
版本控制
Pull Request 支持
更好的 Pull Request 支持
Pull Request 可以更快完成创建:只需在 Pull Request 视图中点击 图标并填写所有细节。视图顶部的新选项卡包含关于您的 Pull Request 的所有信息。双击 Files 选项卡中的任意文件,IDE 将打开编辑器中的差异。您还会发现对 Pull Request 模板的支持,其中包含 Pull Request 的描述文本。
Git 提交模板
支持 Git 提交模板
IntelliJ IDEA 支持 Git 提交模板。如果要创建自定义提交消息,您可以使用模板,在其中填写必要信息。然后,IDE 将把文本显示为初始提交消息。
预提交检查
为预提交检查配置配置文件
现在,在将变更提交到 VCS 之前,可以轻松选择代码检查配置文件。点击齿轮图标显示提交选项,选中 Analyze code 复选框,点击 Choose profile,然后选择所需的配置文件。您的 IDE 会在提交前用它来检查代码。
URL 内嵌提示
从另一个分支获取文件
在 v2021.1 中,您可以通过 Compare with branch 对话框从另一个分支获取文件。您只需选择要获取的文件,然后点击 Show diff 旁边新增的向下箭头图标。
改进了分支
保存到 Shelf
您可以使用新的 Save to Shelf 操作将变更保留在本地并复制到 Shelf。在 macOS 上按 ⇧⌘A(在 Windows 或 Linux 上按 Ctrl Shift A),然后输入 Save to Shelf 即可访问此操作。
Perforce 集成
Perforce 插件现在与 IntelliJ IDEA Community Edition 完全兼容,并与您的 IDE 捆绑。此插件源代码位于 GitHub。
编辑器
可调整字体
字体粗细选项
在长时间的编码工作中,选择一个舒适的编辑器字体非常重要。最近增加的版式设置让这个选择变得更加简单和个性化。在 v2021.1 中,您可以在 Preferences / Settings | Editor | Fonts 中调整主字体和粗体字体的粗细。
最大化分割视图中的选项卡
最大化分割视图中的选项卡
打开多个垂直分割编辑器的选项卡时,可以双击其中任意一个以最大化该特定选项卡的编辑器窗口。只需再次双击即可将窗口恢复到原始大小。
PreviousNext
JSONPath 支持
IntelliJ IDEA 现在支持使用 Goessner 或 Jayway 语法的 JSONPath 表达式。对于 JSON 文件,您可以通过 Edit | Find 调用 Evaluate JSONPath Expression 操作,在 JSONPath 写入查询。如果文件包含由 JSONPath 编写的部分,您可以使用相同的功能并添加 JSON 输入以测试 JSONPath 查询。
JSON Lines 支持
JSON Lines 支持
IntelliJ IDEA 支持以换行符分隔的 JSON Lines 格式,该格式用于处理结构化数据和日志。IDE 将识别 .jsonl、.jslines、.ldjson 和 .ndjson 文件类型。
分析器 ULTIMATE
PreviousNext
我们重新设计了分析器 UI。Home 窗口的信息量更大,将分析器附加到进程的速度也更快。我们还添加了两个新操作,可以通过右键点击正在运行的应用程序来访问:Capture Memory Snapshot,用于获取应用程序的 *.hprof 快照;CPU and Memory Live Charts,会打开一个带有可视化工具的选项卡,用于跟踪资源消耗。
Java
PreviousNext
支持 Java 16
IntelliJ IDEA 具有对 Java 16 的基本支持,于 2021 年 3 月发布。部分更新包括内部类声明显式或隐式静态成员的新功能,以及 Stream.collect(toUnmodifiableList()) 的变化,其已转换为 stream.toList()。IDE 在流的代码补全列表上首先显示 toList() 项。
PreviousNext
数据流分析的新检查
IntelliJ IDEA 会在数组初始化为负数时发出警告。它还可以识别 Arrays.copyOf() 和 Collection.toArray() 方法。而且,IDE 还支持拆箱或转换整数的方法,如 Integer.longValue 和 Byte.intValue。
PreviousNext
其他改进的新检查
现在,您可以缩小 for-each 循环参数类型,避免不必要的转换。如果筛选器使用的值与映射器生成的值相同,则另一项检查允许您通过互换 .filter() 和 .map() 调用简化代码语法。此外,将 StringBuffer 替换为 StringBuilder 的检查已更新,涵盖了更多情况。
PreviousNext
链式构建器方法的格式设置
链式构建器方法的新格式设置选项有助于提高其可读性。您可以在 Chained method calls 下拉列表的 Preferences/Settings | Editor | Code Style | Java | Wrapping and Braces 中配置格式化程序。builder methods 选项可以让您创建一列方法,IDE 将把这些方法视为构建器方法,把每个方法置于单独一行。选中 Wrap first call 复选框时,第一个构建器方法也将出现在单独一行上。您也可以手动添加缩进,如果勾选 Keep builder methods indents 复选框,IDE 将使其保持不变。
Kotlin
Kotlin 快速高亮显示
更快地高亮显示代码问题
实时代码分析能够更快地检测到错误和警告。与之前版本相比,IntelliJ IDEA 2021.1 几乎可以即时高亮显示代码问题。现在,代码补全机制可以更快地运行,并且 IDE 对冻结的响应有所改善。
Kotlin 快速高亮显示
改进的代码补全
Kotlin 中的代码补全机制提供了需要类型参数的函数。选择此类函数后,IDE 会将正确的类型参数添加到前面的代码。
更好的代码覆盖率
IntelliJ IDEA 的 code coverage 运行程序现在完全支持 Kotlin 的内联函数和协同程序。
Swagger UI 支持
重构改进
我们重新设计了 Change Signature 重构的 UI,并添加了一个新复选框,用于将添加的参数设置为默认参数。
Kotlin 调试器更新
IntelliJ IDEA 调试器可以评估 Kotlin 中的 get 表达式,并将其显示在 Variables 视图中。您也可以从 IDE 跳转到源。
Kotlin UML
适用于 Kotlin 的 UML 类图
UML类图现已适用于编译到 JVM 的 Kotlin 代码,并且可以同时显示 Java 和 Kotlin 类。我们计划即将支持其他 Kotlin 后端的 UML 图。
Scala
Type Diff 中的 Kind
Type Diff 中的 Kind
Scala 开发者用到 kind 程度较高的类型时,往往倾向于采用独特的样式。Type Diff 工具提示现在支持 kind。
机器学习补全
机器学习补全
该版本引入了基于机器学习的 Scala 代码补全。您可以在 Settings | Editor | Code Completion | ML | Scala 中启用该功能。
PreviousNext
编译图表中的阶段和单元
除了模块,编译图表现在还可以显示阶段和单元,让您更深入地了解编译。打开 Build 工具窗口,选择 Chart 节点,选择细节的所需 Level。
IntelliJ 平台插件模板
IntelliJ 平台插件模板
通过 sbt-idea 插件即可使用 Scala 和 sbt 开发 IntelliJ 平台插件。新增的内置 Project Wizard 模板将使过程更加简单(这个功能取决于 Plugin DevKit)。
构建工具
HPROF 内存查看器
我们已经恢复了导入 Maven 项目时自定义设置的功能。要激活该选项,请在 File | New Projects Settings | Preferences for new Projects | Build, Execution, Deployment | Build Tools | Maven 中选择 Show settings dialog for new Maven projects。
框架与技术 ULTIMATE
Pull Request 支持
支持替换 http:// 的新检查
您的 IDE 现在可以高亮显示 http:// 协议用法,并将其更改为 https://。该检查默认启用。您可以将 URL 添加到忽略的 URL 列表,或者在 Preferences/Settings | Editor | Inspections | Security – Link with unencrypted protocol 中禁用对整个或部分项目的检查。
Pull Request 支持
改进了 HTTP 客户端
如果您从 HTTP 客户端运行请求,响应将出现于在此版本获得 UI 和 UX 更新的 Services 工具窗口。您可以折叠返回的 HTML、JSON 或 XML,复制其正文,隐藏行号,选择显示格式,并快速滚动到响应的顶部和底部。
HTTP 客户端中的 SSL 支持
如果将 SSL 客户端身份验证用于 https:// 协议,则可以在 HTTP 客户端中配置 SSL 设置。为此,请点击 Add environment file,然后选择 Private。IDE 将自动创建一个文件,您可以在其中添加 SSL 配置。代码补全将提供帮助。
Swagger UI 支持
适用于 JVM 框架的新项目向导
我们重新设计了用于创建 Spring、Micronaut、Quarkus 和 MicroProfile 项目的向导。开始一个新项目现在只需两步!第一个屏幕方便地包含了所有核心信息,第二个屏幕则显示了特定于框架的设置。新的 UI 更加整洁,项目创建流程也更加直观。
Pull Request 支持
改进了 JPA 支持
我们为包含 JPA 实体的项目添加了重新设计的间距图标。这些图标可以点击,并包含了对实体及其特性最实用的操作列表。我们还改进了对 Kotlin 和多模块项目的 JPA 支持。
适用于 Jakarta EE 9 的 JPA 控制台
现在可以使用 JPA 控制台在 Jakarta EE 9 项目中编写和运行 JPQL 查询。
UML 图的新配色方案
我们给使用浅色主题的用户带来一个好消息:UML 图现已拥有新的配色方案,更加整洁易读。
Swagger 改进
Swagger 支持带有外部文件引用 ($ref) 的规范。此外,规范文件的 Structure 视图也获得更多节点,包括 Security、Callbacks 和 Examples。
Swagger UI 支持
Selenium 页面对象生成器
IntelliJ IDEA 现在支持用于检测 Web 应用程序 DOM 元素的实验性工具。使用前安装 Selenium UI Testing 插件。
您可以通过 Tools | Generate Selenium Page Object 访问这个新工具。在打开的对话框中,输入网页地址,选择任意 DOM 元素,然后将其添加到下面的区域。您可以在那里更改元素的语言或框架。我们的页面对象生成器支持Java、Kotlin 和 Groovy 以及 Selenium、FluentLenium、Selenide、Geb、Atlas 和 JDI Light 等框架。
您可以自定义每个框架的代码模板。
Kubernetes ULTIMATE
快速删除资源
可以从编辑器中删除当前上下文中的所有群集资源 - 只需点击间距中的 Run 图标,然后选择 Delete。
支持 Kustomize 3.7.0 组件
您可以在 Settings/Preference | Languages & Frameworks | Kubernetes 的 Kustomize 版本下拉列表中选择新的 Kustomize 3.7.0 组件。
支持 kind: List
如果您需要使用 kubectl get <resource type> -o yaml 命令返回的内容或将资源整理到列表,IDE 现已支持 kind: List。在列表的每个资源中,您都可以重命名标签,并通过间距图标使用代码辅助和导航。您还可以将列表与多文档 YAML 文件相互转换。
PreviousNext
Helm 项目的非默认值
可以创建自定义 values.yaml 文件。IDE 会将名称中带有“values”的文件视为值文件。从上下文菜单选择 Configure Helm Parameters、Helm Lint 或 Helm Template,打开对话框,配置图表模板将使用的值文件。您也可以将值粘贴到对话框的 Additional values 区域手动添加值。
Docker
PreviousNext
改进了 Run/Debug Configuration
Run/Debug Configuration 对话框现在更加简洁灵活。要添加所有必要的构建选项,请点击 Modify options。要添加运行选项,请点击 Modify。IDE 现在会验证每个选项以确保其兼容。我们支持 Docker Compose 的所有现有选项。代码补全现在支持 Dockerfiles Run Options 和 Image ID or name.
BuildKit 支持
我们增加了对 BuildKit 的实验性支持,可加快项目构建速度。同时简化了从整个多阶段 Dockerfile 分别构建命名阶段的操作。您只需单击阶段名称旁边的 hammer 图标,IDE 即可使用 BuildKit 构建映像。
多阶段 Dockerfiles 中的 UI 增强
如果使用多阶段 Dockerfile,您现在可以折叠阶段并在阶段之间发现明显的分隔线。
取消 Docker 运行
正在运行的 Dockerfile 可以快速停止。为此,请转到 Services 工具窗口,选择正在运行的项,调用上下文菜单,然后点击 Stop Deploy。
Docker 挂载的环境变量和宏
使用 Bind mount 时,现在可以更快地输入主机上目录的路径。补全机制允许您在 Run/Debug Configuration 的 Bind mount 选项中选择宏和环境变量。
Dockerfiles 中的映像补全
代码补全现在可以用于映像名称。
JavaScript ULTIMATE
改进了对 Stylelint 的支持
使用 Stylelint,您可以更轻松地检查 CSS 代码。现在,点击几下即可解决这个常见的 linter 的问题。将鼠标悬停在文件中的问题上或将文本光标放在其上,然后按 Alt Enter,选择 Stylelint: Fix current file。此外,您现在可以在 Preferences / Settings | Languages & Frameworks | Style Sheets | Stylelint 的相应字段下指定配置文件的路径。
捆绑的 MDN 文档
MDN 文档现与 IntelliJ IDEA 捆绑。这将有助于防止 MDN 网站的连接问题,并使编辑器内文档在 HTML、CSS 和 JavaScript 文件中显示得更快。编辑器内文档也将提供更多信息 - 例如,您将看到有关 JavaScript API 受支持的浏览器版本的详细信息。
Swagger UI 支持
样式表的选择器特异性
使用样式表时,您现在可以查看选择器的特异性 - 只需将鼠标悬停在要查看的选择器上即可。或者,将焦点放在选择器上,按 F1/Ctrl Q 在 Documentation 弹出窗口中查看这些信息。
数据库工具 ULTIMATE
关于数据库工具更新的详细描述,请阅读最新变化。
授权 UI
我们为修改对象时的授权编辑添加了一个 UI。您可以使用 Cmd/Ctrl F6 在数据库浏览器中的用户上调用 Modify user 窗口,该窗口现在具有向对象添加授权的 UI. 这些更新适用于 PostgreSQL、Redshift、Greenplum、MySQL、MariaDB、DB2、SQL Server 和 Sybase。
上下文实时模板
我们推出了从数据库浏览器直接生成简单语句的解决方案 - 实时模板。您可以使用 SQL node 中的 Preferences/Settings | Editor | Live Templates 添加自己的模板或编辑现有的模板。
数据库复制粘贴
简单明了的操作
我们简化了导航 - 在 SQL 中的对象上调用 Go to declaration (Ctrl/Cmd B) 现在会将您带到 DDL,而不是数据库树。我们还为 Select in database tree 操作引入了快捷键:Windows/Linux 为 Alt Shift B,macOS 为 Opt Shift B。
更好的数据库排序
更好的排序
我们改进了数据排序。新的 ORDER BY 字段的工作原理类似于 WHERE 字段(之前叫做 Filter):输入工作子句将其应用于网格查询。如果要在客户端使用排序(IntelliJ IDEA 不会重新运行查询,也不会在当前页面对数据进行排序),应取消选中 Sort via ORDER BY。另一个更新是,排序默认不会“堆叠”;点击用于排序数据的列名后,基于其他列的排序将被清除。
数据库复制粘贴
轻松复制粘贴数据源
闻名世界的快捷键 Ctrl/Cmd C/V/X 现在可以用于复制、剪切和粘贴数据源。复制数据源时,XML 会被复制到剪贴板,然后可以通过通讯工具共享。您也可以使用 Paste 操作从其他位置粘贴 XML。如果您在项目中剪切并粘贴数据源,它会被直接移动,无需密码。但在其他情况下都需要密码。
编辑 MongoDB 中的数据
编辑 MongoDB 中的数据
您现在可以编辑 MongoDB 集合中的数据。还有语句预览可供使用。为了使编辑更加灵活,我们引入了从 UI 更改字段类型的功能。您可以从字段的上下文菜单或值编辑器中完成此操作。
4
使用 Docker 运行
Docker 方式,先前我还以为会比较麻烦,一来我对 Docker 不是很熟悉,二来我也不知道该怎么配置 Dockerfile,但体验下来发现也可以很丝滑的,Dockerfile 文件的配置就一行搞定了,不得不说有点出乎我的意料:
# 刚开始我也不知道怎么配置,就只放了这么一句,发现竟然就可以了
FROM openjdk:11.0.11-oraclelinux7
新建一个 Run Target,选择 Docker 会弹出这个界面。首先要根据下图先设置一下 Docker Server。Dockerfile 就使用上面的那个 Dockerfile 就可以了:
有点小 bug,Run options 的配置不生效,而是使用了随机端口映射,Spring Boot 的那个项目启动后,IDEA 会告诉告诉你映射到那个端口了。
Docker 服务的设置
Docker Server 设置,这里使用了本地的 Docker:
设置使用本地的 Docker
出现这样的界面就表示启动成功了:
docker 的配置也完成
剩下的正常 Run Debug。
4
总结
不管是 WSL 、SSH 还是 Docker,简单配置一下真的跟本地运行没有太大的区别,正常的 Run、正常的 Debug。对于需要这些功能的开发人员,还是比较建议升级的。
这个 IDEA 的新特性一套体验下来,虽然有几个前面所提的问题,但不得不说:IDEA YYDS!。