升级idea 2026.2,idea trae插件 1.7.0.1,缺少JCEF运行时

Unhandled exception in EDT

com.intellij.openapi.diagnostic.UnhandledException: com/intellij/ui/jcef/JBCefBrowser
报错

目前插件版本更新至1.7.0.3,jbr 25.0.4还是这样报错

下载带jcef的jetbrains runtime包到本地,然后运行环境选择本地包,github下载地址:https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr-release-25.0.4b508.27,

找到对应操作系统的包。mac环境下,将:jbrsdk_jcef-25.0.4-osx-aarch64-b508.27.tar.gz包解压到:~/Library/Java/JetBrainsRuntime。

同样的问题,我用trae赋予对应文件夹操作权限,让它自己操作修复好了,然后我让它总结了下。哦对,我用的deepseek的v4f。

================================================================================

IntelliJ IDEA 2026.2 中 Trae 插件报错(NoClassDefFoundError: JBCefBrowser)修复方案
记录时间:2026-08-15

一、问题现象

IDEA 2026.2(#IU-262.9437.185)中,Trae 插件(版本 1.7.0.3)加载报错:
NoClassDefFoundError: com/intellij/ui/jcef/JBCefBrowser
打开 Trae 插件设置页面时崩溃/报错。

二、根因分析

  1. IDEA 2026.2 起,JCEF(Java Chromium Embedded Framework,即嵌入式浏览器内核)
    从核心平台中拆分为独立插件「Web Browser (JCEF)」(模块 id 为 com.intellij.modules.jcef)。
  2. 模块化后,JCEF 的类(如 com.intellij.ui.jcef.JBCefBrowser)只对声明了
    com.intellij.modules.jcef 依赖的插件可见。
  3. Trae 插件 1.7.0.3 的 META-INF/plugin.xml 中没有声明该依赖,
    因此插件在运行时引用 JBCefBrowser 类时找不到类,抛出 NoClassDefFoundError。

三、修复思路

在 Trae 插件的 META-INF/plugin.xml 中补上依赖声明:
com.intellij.modules.jcef

核心难点(IDEA 插件安装机制):

  • IDEA 实际加载的是 Roaming 目录下的「instrumented-*.jar」(已插桩的副本)。
  • 但该 jar 的"原始来源"是 Local 缓存目录中的 marscode.zip 压缩包。
  • 每次 IDEA 重启时,会从 Local 的 marscode.zip 重新生成/还原插件目录,
    因此只改 Roaming 的 jar 会被覆盖丢失。
  • 结论:必须【双端同时修改】——
    ① Roaming 运行 jar(实际加载)
    ② Local 源 zip 内的 jar entry(防止重启还原)

四、涉及的文件路径

【Roaming 运行 jar】(实际被 IDEA 加载)
C:\Users\Penta\AppData\Roaming\JetBrains\IntelliJIdea2026.2\plugins\marscode\lib\instrumented-marscode-1.7.0.3.jar

【Local 源 zip】(IDEA 插件安装缓存,重启后据此还原插件)
C:\Users\Penta\AppData\Local\JetBrains\IntelliJIdea2026.2\plugins\marscode.zip
(zip 内 entry 路径:marscode/lib/instrumented-marscode-1.7.0.3.jar)

【备注】本机 C:\Users\Penta\AppData 是符号链接,真实物理路径为
F:\备份\C映射\Users\Penta\AppData ;
用 MCP Filesystem 工具操作时须使用真实物理路径。

五、补丁准备脚本(prepare_patch.ps1)

功能:从 Local zip 提取原始 jar → 修改 plugin.xml 追加 jcef 依赖 → 输出补丁 jar 到 F:\cache\marscode_patch\


$ErrorActionPreference = ‘Stop’
Add-Type -AssemblyName System.IO.Compression.FileSystem

$zipPath = ‘C:\Users\Penta\AppData\Local\JetBrains\IntelliJIdea2026.2\plugins\marscode.zip’
$workDir = ‘F:\cache\marscode_patch’
if (Test-Path $workDir) { Remove-Item $workDir -Recurse -Force }
New-Item -ItemType Directory -Path $workDir | Out-Null

1. 从 zip 中提取 instrumented-marscode-1.7.0.3.jar

$srcJar = Join-Path $workDir ‘instrumented-marscode-1.7.0.3.jar’
$srcZip = [System.IO.Compression.ZipFile]::OpenRead($zipPath)
$entry = $srcZip.Entries | Where-Object { $_.FullName -eq ‘marscode/lib/instrumented-marscode-1.7.0.3.jar’ }
if (-not $entry) { Write-Host ‘ENTRY_NOT_FOUND’; $srcZip.Dispose(); exit 1 }
$outStream = [System.IO.File]::Create($srcJar)
$inStream = $entry.Open()
$inStream.CopyTo($outStream)
$outStream.Close(); $inStream.Close()
$srcZip.Dispose()
Write-Host “EXTRACTED: $srcJar ($((Get-Item $srcJar).Length) bytes)”

2. 修改 plugin.xml:在 com.intellij.modules.lang 之后插入 jcef 依赖

$jar = [System.IO.Compression.ZipFile]::Open($srcJar, [System.IO.Compression.ZipArchiveMode]::Update)
$xmlEntry = $jar.GetEntry(‘META-INF/plugin.xml’)
if (-not $xmlEntry) { Write-Host ‘XML_NOT_FOUND’; $jar.Dispose(); exit 1 }
$reader = New-Object System.IO.StreamReader($xmlEntry.Open())
$content = $reader.ReadToEnd()
$reader.Close()

$needle = ‘com.intellij.modules.lang’
if ($content -notmatch ‘com.intellij.modules.jcef’) {
if (-not $content.Contains($needle)) { Write-Host ‘NEEDLE_NOT_FOUND’; $jar.Dispose(); exit 1 }
$content = $content.Replace($needle, $needle + “rncom.intellij.modules.jcef”)
$entryStream = $xmlEntry.Open()
$entryStream.SetLength(0)
$writer = New-Object System.IO.StreamWriter($entryStream)
$writer.Write($content)
$writer.Flush()
$writer.Close()
$entryStream.Close()
Write-Host ‘PATCHED: jcef depends added’
} else {
Write-Host ‘ALREADY_PATCHED’
}
$jar.Dispose()

3. 校验

$check = [System.IO.Compression.ZipFile]::OpenRead($srcJar)

$ce = $check.GetEntry(‘META-INF/plugin.xml’)
$cr = New-Object System.IO.StreamReader($ce.Open())
$cc = $cr.ReadToEnd()
$cr.Close(); $check.Dispose()
($cc -split “`n”) | Select-String ‘depends’ | ForEach-Object { $_.Line.Trim() }
Write-Host “DONE: $srcJar”

六、部署脚本(apply_patch.ps1)

功能:备份原文件 → 覆盖 Roaming jar → 更新 Local zip 内 entry → 双端校验

【重要】本脚本在沙箱/受限终端里对 AppData 的写入可能不稳定,建议:
优先用 MCP Filesystem 工具(真实路径 F:\备份\C映射…)执行文件移动;
zip 内容更新只能在 PowerShell 里做(可把 zip 先移到 F:\cache 下处理完再移回)。


$ErrorActionPreference = ‘Stop’
Add-Type -AssemblyName System.IO.Compression.FileSystem

$patch = ‘F:\cache\marscode_patch\instrumented-marscode-1.7.0.3.jar’
$roamingJar = ‘C:\Users\Penta\AppData\Roaming\JetBrains\IntelliJIdea2026.2\plugins\marscode\lib\instrumented-marscode-1.7.0.3.jar’
$localZip = ‘C:\Users\Penta\AppData\Local\JetBrains\IntelliJIdea2026.2\plugins\marscode.zip’
$bkDir = ‘F:\cache\marscode_patch\backup_20260815’

if (-not (Test-Path $patch)) { Write-Host ‘PATCH_MISSING’; exit 1 }
$patchLen = (Get-Item $patch).Length
Write-Host “PATCH: $patchLen bytes”

备份现有文件

New-Item -ItemType Directory -Path $bkDir -Force | Out-Null
if (Test-Path $roamingJar) { Copy-Item $roamingJar “$bkDir\roaming_instrumented-marscode-1.7.0.3.jar” -Force; Write-Host “BACKUP_ROAMING_OK” }
if (Test-Path $localZip) { Copy-Item $localZip “$bkDir\marscode.zip”; Write-Host “BACKUP_LOCAL_OK” }

覆盖 Roaming 侧 jar

Copy-Item $patch $roamingJar -Force
Write-Host “ROAMING_REPLACED: $((Get-Item $roamingJar).Length) bytes”

更新 Local zip 内的 jar entry

if (Test-Path $localZip) {
$zip = [System.IO.Compression.ZipFile]::Open($localZip, [System.IO.Compression.ZipArchiveMode]::Update)
$entry = $zip.GetEntry(‘marscode/lib/instrumented-marscode-1.7.0.3.jar’)
if ($entry) {
$entry.Delete()
$newEntry = $zip.CreateEntry(‘marscode/lib/instrumented-marscode-1.7.0.3.jar’)
$os = $newEntry.Open()
$fs = [System.IO.File]::OpenRead($patch)
$fs.CopyTo($os)
$fs.Close(); $os.Close()
Write-Host ‘ZIP_ENTRY_REPLACED’
} else {
Write-Host ‘ZIP_ENTRY_NOT_FOUND’
}
$zip.Dispose()
} else {
Write-Host ‘LOCAL_ZIP_MISSING’
}

校验两处

$roamingCheck = [System.IO.Compression.ZipFile]::OpenRead($roamingJar)
$re = $roamingCheck.GetEntry(‘META-INF/plugin.xml’)
$rr = New-Object System.IO.StreamReader($re.Open())
$rc = $rr.ReadToEnd(); $rr.Close(); $roamingCheck.Dispose()
Write-Host “ROAMING_HAS_JCEF: $($rc -match ‘com.intellij.modules.jcef’)”

$zipCheck = [System.IO.Compression.ZipFile]::OpenRead($localZip)

$ze = $zipCheck.GetEntry(‘marscode/lib/instrumented-marscode-1.7.0.3.jar’)
$tmp = ‘F:\cache\marscode_patch\zip_verify.jar’
$os2 = [System.IO.File]::Create($tmp)
$zs = $ze.Open()
$zs.CopyTo($os2); $os2.Close(); $zs.Close(); $zipCheck.Dispose()
$jarCheck = [System.IO.Compression.ZipFile]::OpenRead($tmp)
$je = $jarCheck.GetEntry(‘META-INF/plugin.xml’)
$jr = New-Object System.IO.StreamReader($je.Open())
$jc = $jr.ReadToEnd(); $jr.Close(); $jarCheck.Dispose()
Write-Host “ZIP_HAS_JCEF: $($jc -match ‘com.intellij.modules.jcef’)”
Write-Host ‘ALL_DONE’

七、执行步骤(本次实际操作顺序)

前置:关闭 IntelliJ IDEA(jar 被占用时无法替换)。

  1. 用 MCP Filesystem 在 F:\cache\marscode_patch\ 下创建目录:

    • work(zip 处理工作区)
    • backup_roaming(Roaming jar 备份)
  2. 备份并替换 Roaming 运行 jar(MCP move_file,避免沙箱写入不稳定):
    a. 移动原 Roaming jar → F:\cache\marscode_patch\backup_roaming\instrumented-marscode-1.7.0.3.jar.orig
    b. 移动补丁 jar → Roaming 原位置(F:\备份\C映射\Users\Penta\AppData\Roaming\JetBrains\IntelliJIdea2026.2\plugins\marscode\lib\instrumented-marscode-1.7.0.3.jar)

  3. 处理 Local 源 zip:

    a. MCP move_file 把 Local 的 marscode.zip 移到 F:\cache\marscode_patch\work\marscode.zip
    b. PowerShell(注意先 LoadWithPartialName 加载程序集)更新 zip 内 entry:

    [System.Reflection.Assembly]::LoadWithPartialName(‘System.IO.Compression’) | Out-Null

    [System.Reflection.Assembly]::LoadWithPartialName(‘System.IO.Compression.FileSystem’) | Out-Null
    $zipPath=‘F:\cache\marscode_patch\work\marscode.zip’
    $patch=‘F:\cache\marscode_patch\instrumented-marscode-1.7.0.3.jar’
    $zip=[System.IO.Compression.ZipFile]::Open($zipPath,[System.IO.Compression.ZipArchiveMode]::Update)
    $entry=$zip.GetEntry(‘marscode/lib/instrumented-marscode-1.7.0.3.jar’)
    if($entry){$entry.Delete()}
    $newEntry=$zip.CreateEntry(‘marscode/lib/instrumented-marscode-1.7.0.3.jar’)
    $os=$newEntry.Open(); $fs=[System.IO.File]::OpenRead($patch); $fs.CopyTo($os)
    $fs.Close(); $os.Close(); $zip.Dispose()

    c. MCP move_file 把更新后的 zip 移回 Local 原位置。

  4. 校验双端:

    • ROAMING_HAS_JCEF: True
    • FINAL_ZIP_HAS_JCEF: True
      校验命令见第八节。
  5. 清理测试残留文件(用 MCP move_file 移到 F:\cache\marscode_patch\cleanup\)。

  6. 重启 IDEA,打开 Trae 插件设置页确认不再报 JBCefBrowser。

八、双端校验命令(PowerShell)

[System.Reflection.Assembly]::LoadWithPartialName(‘System.IO.Compression’) | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName(‘System.IO.Compression.FileSystem’) | Out-Null

校验 Roaming jar

$roam=‘C:\Users\Penta\AppData\Roaming\JetBrains\IntelliJIdea2026.2\plugins\marscode\lib\instrumented-marscode-1.7.0.3.jar’
$z1=[System.IO.Compression.ZipFile]::OpenRead($roam)
$e1=$z1.GetEntry(‘META-INF/plugin.xml’)
$r1=New-Object System.IO.StreamReader($e1.Open())
$c1=$r1.ReadToEnd(); $r1.Close(); $z1.Dispose()
Write-Host “ROAMING_HAS_JCEF: $($c1 -match ‘com.intellij.modules.jcef’)”

校验 Local zip

$zip2=[System.IO.Compression.ZipFile]::OpenRead(‘C:\Users\Penta\AppData\Local\JetBrains\IntelliJIdea2026.2\plugins\marscode.zip’)
$e2=$zip2.GetEntry(‘marscode/lib/instrumented-marscode-1.7.0.3.jar’)
$tmp=‘F:\cache\marscode_patch\work\final_zip_verify.jar’
$os=[System.IO.File]::Create($tmp); $s=$e2.Open(); $s.CopyTo($os); $os.Close(); $s.Close(); $zip2.Dispose()
$j2=[System.IO.Compression.ZipFile]::OpenRead($tmp)
$pe2=$j2.GetEntry(‘META-INF/plugin.xml’)
$r2=New-Object System.IO.StreamReader($pe2.Open())
$c2=$r2.ReadToEnd(); $r2.Close(); $j2.Dispose()
Write-Host “FINAL_ZIP_HAS_JCEF: $($c2 -match ‘com.intellij.modules.jcef’)”

【期望输出】
ROAMING_HAS_JCEF: True
FINAL_ZIP_HAS_JCEF: True

九、本次修复的实际验证结果

  • 补丁 jar:397,830 字节,plugin.xml 已含 com.intellij.modules.jcef
  • ROAMING_HAS_JCEF: True
  • FINAL_ZIP_HAS_JCEF: True
  • Local zip 更新后大小:663,626,352 字节(原 663,672,368)
  • Roaming lib 下 4 个测试残留文件(copy_test.jar、wtest2.txt、
    wtest3.txt、mcp_test.txt)已清理到 F:\cache\marscode_patch\cleanup\

十、备份与回滚

备份位置:

  • 原 Roaming jar:F:\cache\marscode_patch\backup_roaming\instrumented-marscode-1.7.0.3.jar.orig
  • 原 Local zip: (如需恢复可重新从官方市场下载 marscode 插件 1.7.0.3)

回滚方式:

  1. 关闭 IDEA
  2. 把 backup_roaming 下的 .orig 文件移回 Roaming jar 位置
  3. 重新从 JetBrains 插件市场下载安装 marscode.zip(或联系 Trae 官方提供原始包)

十一、关键经验

  1. IDEA 2026.2 起 JCEF 模块化:任何自定义/三方插件若用到 JCEF 类且报
    NoClassDefFoundError,优先检查 plugin.xml 是否声明 com.intellij.modules.jcef。
  2. IDEA 插件实际加载的是 Roaming 下 instrumented-*.jar 副本,但还原源在 Local 的
    marscode.zip——只改一处会被重启覆盖,必须双端同时改。
  3. C:\Users\Penta\AppData 为符号链接,真实路径在 F:\备份\C映射\Users\Penta\AppData;
    沙箱/Terminal 对 AppData 写入不稳定(可能被隔离),MCP Filesystem 用真实物理路径
    操作最可靠。
  4. PowerShell 操作 zip 前必须先 [System.Reflection.Assembly]::LoadWithPartialName
    加载 System.IO.Compression 与 System.IO.Compression.FileSystem,否则
    ZipArchiveMode 类型找不到。
  5. 663MB 大 zip 更新 entry 采用 ZipArchiveMode.Update 就地重写,耗时约 2 秒即可完成。

================================================================================

文档结束

@TRAE技术支持-麻辣鸡腿堡

@TRAE技术支持-麻辣鸡腿堡 这个方案可行吗

不是官方解决方案,目前推荐降版本使用