如果 JetBrains IDE 中的插件无法安装,Maven 或 pip 无法下载依赖项,Marketplace 根本无法打开 — 很可能是网络限制的问题。代理可以在几分钟内解决这个问题。在本文中,我们将讨论所有的设置方法:通过 IDE 内置界面、通过系统变量和通过配置文件 — 适用于 PyCharm、IntelliJ IDEA、WebStorm、GoLand 和其他 JetBrains 产品。
开发者在 IDE 中使用代理的原因
JetBrains IDE 积极访问网络:从 Marketplace 下载插件,更新索引,通过 Maven Central、PyPI、npm 和其他存储库拉取依赖项,检查许可证,通过 JetBrains 账户同步设置。如果这些请求中的任何一个被阻止 — 工作将变得缓慢或完全停止。
以下是一些具体情况,您无法避免使用代理:
- 具有防火墙的企业网络。 许多公司仅通过企业代理服务器允许外部流量。在 IDE 中没有其设置,插件将无法安装,依赖项将无法下载。
- 地理限制。 部分存储库和 CDN 在地理上受到限制。具有所需位置的代理可以解除此限制。
- 在互联网受限的国家工作。 JetBrains Marketplace、GitHub Packages、Maven Central 可能无法直接访问。
- 开发和测试网络应用程序。 需要将 IDE 的流量定向到特定节点,以检查来自其他地区的应用程序行为。
- 公共网络的安全性。 在咖啡馆或共享办公空间工作时,代理加密 IDE 的流量,并保护令牌和密钥免受拦截。
- 绕过制裁限制。 2022 年后,一些外部存储库和服务实施了基于 IP 的限制 — 代理允许继续工作而无需更换工具。
与浏览器不同,浏览器中代理设置一次即可全局使用,在 JetBrains IDE 中,代理需要单独设置 — 有时需要在多个地方设置:在 IDE 本身、依赖管理器和语言解释器中。我们将逐一讨论每个级别。
为 JetBrains 选择哪种类型的代理
JetBrains IDE 支持三种类型的代理:HTTP、HTTPS 和 SOCKS5。对于开发者的大多数任务,HTTP/HTTPS 代理是合适的 — 它们透明地处理所有 IDE、Maven、Gradle 和 pip 的请求。SOCKS5 提供更多灵活性,并在 TCP 层工作,这对非标准协议很有用。
| 代理类型 | 在 IDE 中的支持 | 适合于 | 特点 |
|---|---|---|---|
| HTTP/HTTPS | ✅ 原生支持 | 插件、依赖项、许可证 | 最容易设置 |
| SOCKS5 | ✅ 原生支持 | 任何 TCP 连接 | 支持身份验证 |
| PAC 文件 | ✅ 通过系统设置 | 企业网络 | 灵活的路由 |
| 系统代理 | ✅ 自动检测 | 当已在操作系统中设置时 | 无需额外设置 |
如果您使用企业代理 — 很可能是带有用户名和密码身份验证的 HTTP/HTTPS 代理。如果您连接外部代理服务以绕过阻塞,请注意 数据中心代理 — 它们提供高速和稳定的连接,这在下载大型依赖项和索引时至关重要。
通过 IDE 界面设置代理 (HTTP/HTTPS)
这是最简单和推荐的方法。设置将应用于 IDE 的所有网络请求:Marketplace、更新、许可证检查、插件同步。该说明适用于 PyCharm、IntelliJ IDEA、WebStorm、GoLand、Rider、CLion 和其他产品。
步骤 1. 打开 IDE 设置
在 Windows 和 Linux 上: File → Settings (或 Ctrl+Alt+S).
在 macOS 上: PyCharm → Preferences (或 Cmd+,).
步骤 2. 找到代理部分
在左侧设置面板中,按照路径转到: Appearance & Behavior → System Settings → HTTP Proxy.
或者只需开始在设置搜索框中输入 proxy — IDE 会立即显示所需部分。
步骤 3. 选择代理类型并填写信息
在 HTTP 代理部分,您将看到三个选项:
- 无代理 — 直接连接(默认)。
- 自动检测代理设置 — IDE 将从操作系统获取设置。
- 手动代理配置 — 手动设置。选择此选项。
选择 手动代理配置 时,请填写以下字段:
- 主机名 — 代理服务器的 IP 地址或域名。例如:
proxy.example.com或192.168.1.100. - 端口号 — 代理的端口。标准值:
8080,3128,8888. - 无代理的主机 — 应该直接连接的主机(不通过代理)。通常这里添加
localhost,127.0.0.1, 公司内部域名。 - 代理身份验证 — 如果代理需要用户名和密码,请勾选并输入凭据。
步骤 4. 检查连接
点击 检查连接 按钮并输入任何 URL — 例如, https://plugins.jetbrains.com. 如果一切设置正确,IDE 将显示状态 连接成功. 然后点击 确定 并重启 IDE。
💡 提示
JetBrains IDE 中的 HTTP 代理设置是全局存储的 — 它们适用于所有项目并在重启之间保持。 如果您需要在不同任务之间切换代理,使用系统环境变量更方便(如下所述)。
在 JetBrains IDE 中设置 SOCKS5 代理
SOCKS5 是一种更灵活的协议,不仅适用于 HTTP/HTTPS,还适用于任何 TCP 连接。如果您的代理提供商提供 SOCKS5,或者您使用 SSH 隧道,这将非常有用。
在 JetBrains IDE 界面中,SOCKS 部分位于同一位置: Appearance & Behavior → System Settings → HTTP Proxy. 在 手动代理配置 部分,将单选按钮从 HTTP 切换到 SOCKS.
请类似于 HTTP 代理填写字段:
- 主机名 — SOCKS5 服务器的地址。
- 端口号 — 端口(通常
1080或1081)。 - 代理身份验证 — 如果需要,输入用户名和密码。
重要提示:JetBrains IDE 的内置 SOCKS 客户端在 JVM 层工作,仅拦截 IDE 直接通过 Java 建立的连接。外部进程 — Maven Wrapper、Gradle Daemon、pip、npm — 作为独立进程启动,并不继承 IDE 界面的代理设置。它们需要单独的设置(见下文部分)。
通过 JVM 参数设置 (vmoptions)
如果通过界面设置无效(例如,在某些版本的 IDE 中或使用非标准插件时),可以通过 JVM 参数直接设置代理。这是一种可靠的低级方法,确保应用于所有 JVM 连接。
如何打开 vmoptions 文件
在 IDE 菜单中,转到: Help → Edit Custom VM Options.... 将打开 pycharm64.vmoptions(或 idea64.vmoptions 对于 IntelliJ IDEA)在用户设置目录中。
在文件末尾添加以下行以设置 HTTP 代理:
-Dhttp.proxyHost=your.proxy.host -Dhttp.proxyPort=8080 -Dhttps.proxyHost=your.proxy.host -Dhttps.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password -Dhttps.proxyUser=username -Dhttps.proxyPassword=password -Dhttp.nonProxyHosts=localhost|127.0.0.1|*.local
对于 SOCKS5 代理,请使用其他参数:
-DsocksProxyHost=your.socks.host -DsocksProxyPort=1080 -DsocksProxyVersion=5
保存文件后,重启 IDE。参数将应用于所有 JVM 连接,包括索引加载、插件工作和内置 Git 客户端。
⚠️ 重要
如果密码中包含特殊字符(@, #, %),需要在 URL 编码中转义。例如, @ → %40. 否则 JVM 将无法正确解析参数,代理将无法工作。
通过系统环境变量设置代理
这种方法在 Linux 和 macOS 上特别方便,也适用于 CI/CD 环境。环境变量不仅被 JVM 继承,还被子进程继承 — 也就是说 Maven、Gradle、pip、npm 也会自动获取它们。
HTTP 代理的标准变量:
export HTTP_PROXY=http://username:[email protected]:8080 export HTTPS_PROXY=http://username:[email protected]:8080 export NO_PROXY=localhost,127.0.0.1,::1
将这些行添加到 ~/.bashrc, ~/.zshrc 或 ~/.profile,具体取决于您的 shell。之后重启终端并从中启动 IDE — 它将获取环境变量。
在 Windows 上,通过系统界面设置变量:
- 打开 控制面板 → 系统 → 高级系统设置 → 环境变量.
- 在“用户变量”部分,点击 新建.
- 添加变量
HTTP_PROXY和HTTPS_PROXY,值为http://username:[email protected]:8080. - 重启 IDE.
请注意:JetBrains IDE 在 Windows 上作为独立进程通过启动器启动,当前终端会话中设置的环境变量可能不会传递到 IDE。通过系统界面或 vmoptions 文件设置它们更可靠。
在 IntelliJ IDEA 中为 Maven 和 Gradle 设置代理
Maven 和 Gradle 是具有自己配置文件的独立工具。即使在 IDE 界面中设置了代理,Maven Wrapper 和 Gradle Daemon 也可能忽略这些设置,因为它们作为独立的 JVM 进程启动。
为 Maven 设置代理
打开文件 ~/.m2/settings.xml(如果不存在,请创建它)并添加 <proxies> 部分:
<settings>
<proxies>
<proxy>
<id>main-proxy</id>
<active>true</active>
<protocol>https</protocol>
<host>proxy.example.com</host>
<port>8080</port>
<username>your_username</username>
<password>your_password</password>
<nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
</proxy>
</proxies>
</settings>
如果您需要为 HTTP 和 HTTPS 单独设置代理,请添加两个具有不同 id 和 protocol 的 <proxy> 块。
为 Gradle 设置代理
对于 Gradle,代理设置在文件 ~/.gradle/gradle.properties(全局)或项目根目录下的 gradle.properties(特定项目)中设置:
systemProp.http.proxyHost=proxy.example.com systemProp.http.proxyPort=8080 systemProp.http.proxyUser=your_username systemProp.http.proxyPassword=your_password systemProp.http.nonProxyHosts=localhost|127.0.0.1 systemProp.https.proxyHost=proxy.example.com systemProp.https.proxyPort=8080 systemProp.https.proxyUser=your_username systemProp.https.proxyPassword=your_password
保存文件后,IntelliJ IDEA 将在下次同步 Gradle 项目时自动获取新设置。点击 重新加载所有 Gradle 项目 按钮(在右侧 Gradle 面板中的刷新图标) — 依赖项将通过代理开始下载。
在 PyCharm 中为 pip 和 conda 设置代理
PyCharm 是 Python 开发者的主要 IDE。通过 pip 和 conda 安装包是通过独立进程进行的,这些进程无法读取 PyCharm 界面的代理设置。以下是为每个包管理器设置代理的方法。
为 pip 设置代理
方法 1 — 在安装包时通过命令行参数:
pip install requests --proxy http://username:[email protected]:8080
方法 2 — 通过 pip 配置文件(持续适用)。打开或创建文件:
- Linux/macOS:
~/.config/pip/pip.conf - Windows:
%APPDATA%\pip\pip.ini
[global] proxy = http://username:[email protected]:8080
方法 3 — 通过环境变量(适用于 pip 和其他 Python 工具):
export HTTP_PROXY=http://username:[email protected]:8080 export HTTPS_PROXY=http://username:[email protected]:8080
为 conda 设置代理
Conda 使用自己的配置文件 .condarc. 在主目录中打开它并添加:
proxy_servers: http: http://username:[email protected]:8080 https: http://username:[email protected]:8080
或在 PyCharm 终端中执行命令:
conda config --set proxy_servers.http http://proxy.host:8080 conda config --set proxy_servers.https http://proxy.host:8080
如果您使用 PyPI 镜像(例如,Yandex 镜像或企业 Nexus),可以将 pip 切换到替代索引,而不是使用代理。但如果镜像也不可用 — 代理仍然是唯一的解决方案。对于与 PyPI 的稳定工作, 住宅代理 是很好的选择 — 它们看起来像普通用户请求,不会被 PyPI 的 CDN 提供商阻止。
常见问题及其解决方案
即使在正确设置的情况下,有时也会出现问题。我们将讨论最常见的问题及其解决方法。
问题 1: “连接被拒绝”或“无法连接到代理”
原因: 主机、端口不正确或代理不可用。
解决方案: 检查代理的地址和端口。尝试通过 curl 在终端连接代理:
curl -x http://proxy.host:8080 https://plugins.jetbrains.com
如果 curl 也无法连接 — 问题出在代理本身,而不是 IDE 的设置。
问题 2: 代理已设置,但插件仍然无法安装
原因: IDE 缓存了旧设置或设置未应用于所有组件。
解决方案:
- 完全关闭 IDE(确保进程未在后台挂起)。
- 清除缓存:
File → Invalidate Caches → Invalidate and Restart. - 检查
vmoptions文件中是否没有冲突的参数。
问题 3: 通过代理工作时出现 SSL/TLS 错误
原因: 企业代理执行 SSL 检查(MITM)并替换证书。JVM 不信任替换的证书。
解决方案: 请系统管理员提供企业 CA 的根证书,并将其导入 Java KeyStore:
keytool -import -alias corporate-ca -keystore $JAVA_HOME/lib/security/cacerts \ -file corporate-ca.crt -storepass changeit
在 JetBrains IDE 中有一个内置工具: Settings → Tools → Server Certificates — 可以通过 GUI 添加受信任的证书。
问题 4: 带身份验证的代理不接受密码
原因: 密码中的特殊字符未转义,或代理使用 NTLM/Kerberos 身份验证(Microsoft 企业代理)。
解决方案: 对于 NTLM 代理,JVM 原生支持,但需要设置额外参数:
-Djdk.http.auth.tunneling.disabledSchemes="" -Djdk.http.auth.proxying.disabledSchemes=""
问题 5: IDE 内的 Git 通过代理无法工作
原因: JetBrains 内置的 Git 客户端使用系统 Git,而不是 JVM 连接。IDE 中的代理设置对其没有影响。
解决方案: 直接在 Git 中设置代理:
git config --global http.proxy http://username:[email protected]:8080 git config --global https.proxy http://username:[email protected]:8080
| 症状 | 可能原因 | 解决方法 |
|---|---|---|
| 插件无法安装 | IDE 中未设置代理 | 设置 → HTTP 代理 |
| Maven 无法下载依赖项 | settings.xml 中没有设置 | ~/.m2/settings.xml → proxies |
| pip 无法安装包 | pip 无法读取 IDE 设置 | pip.conf 或 ENV 变量 |
| SSL 错误 | 代理上的 MITM 检查 | 导入企业证书 |
| Git 通过代理无法工作 | Git 无法读取 JVM 设置 | git config --global http.proxy |
| Gradle 无法同步 | gradle.properties 中没有设置 | ~/.gradle/gradle.properties |
结论
在 JetBrains IDE 中设置代理不是一个按钮,而是多个配置级别。需要记住的主要事项是:IDE 本身(插件、许可证、Marketplace)通过 设置 → HTTP 代理 或通过 vmoptions 中的 JVM 参数进行设置。依赖管理器 — Maven、Gradle、pip、conda — 需要在其配置文件中单独设置。IDE 内的 Git 通过全局 git config 进行设置。
如果您使用代理来绕过地理限制或企业网络限制,选择一个稳定且快速的代理服务器非常重要。对于与存储库、Marketplace 的工作和下载依赖项, 数据中心代理 是很好的选择 — 它们提供高速和最低延迟,这在与数百个依赖项的大型项目同步时至关重要。如果需要最大兼容性以应对阻止服务器 IP 的服务,请考虑使用 住宅代理 — 它们使用真实用户地址,几乎不会引起 CDN 和存储库的防护系统的怀疑。
```