使用 ja-netfilter 做 JetBrains 全家桶本地激活时,2022.2.x 起经常出现 key is invalid 提示,原因与新运行时的模块封闭机制有关。本文说明补丁的放置要求,以及新版本必需的 JVM 参数配置。
补丁目录与路径要求
ja-netfilter 解压后的目录路径不能包含空格和中文,否则 -javaagent 加载失败;如果 IDE 配置目录里已经存在旧的 vmoptions 文件,也要一并检查路径是否干净。


为什么 2022.2.x 起要多写两行参数
这一版本系列 IDE 的运行时从 JBR 11 升级到 JBR 17,Java 模块系统默认不再开放 jdk.internal.org.objectweb.asm 相关包,agent 的反射访问被拦截,表现就是激活时提示 key is invalid。解决办法是在 vmoptions 文件里追加两行 –add-opens,把这两个包开放给未命名模块。

macOS 配置示例
以 GoLand 为例,编辑用户目录配置下的 goland.vmoptions,保证 –add-opens 两行在 -javaagent 之前,agent 路径指向实际的 jar 文件:
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/Users/qzding/ja-netfilter/ja-netfilter.jar
Windows 配置示例
对应文件是配置目录下的 goland64.exe.vmoptions,同样追加两行 –add-opens,并把 -javaagent 换成 Windows 路径:
# 补丁的绝对路径
-javaagent:D:ja-netfilterja-netfilter.jar
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END














暂无评论内容