You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用部署Google App Engine执行appengineRun时遇Jetty异常

解决gradlew appengineRun时的Windows注册表权限警告

嘿,我之前也踩过这个Windows偏好设置警告的坑,先帮你理清楚情况:

首先你遇到的完整输出是这样的:

Starting a Gradle Daemon (subsequent builds will be faster)
2018年3月26日 下午5:47:48 java.util.prefs.WindowsPreferences WARNING: 无法打开/创建首选项根节点Software\JavaSoft\Prefs,根节点为0x80000002。Windows RegCreateKeyEx(...)返回错误码5。
2018-03-26 17:47:51.665:INFO::main: Logging initialized @3872ms
2018-03-26 17:47:53.727:INFO:oejs.Server:main: jetty-9.3.18.v20170406
2018-03-26 17:48:01.040:WARN:oeja....

问题根源

这个警告里的错误码5就是「权限拒绝」,Java尝试访问Windows注册表的HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs路径来创建偏好设置节点,但当前用户没有足够的写入权限。不过别太担心——这个警告大多时候只是日志噪音,不会阻止你的Jetty/GAE本地服务器启动,只是看着闹心而已。

三种解决办法,按需选:

  • 方法1:临时救急——管理员身份运行命令行
    找到你的CMD或者PowerShell,右键选「以管理员身份运行」,再执行gradlew appengineRun。管理员权限会允许Java创建注册表节点,警告直接消失。

  • 方法2:一劳永逸——手动配置注册表权限
    如果不想每次都开管理员窗口,直接手动搞定注册表:

    1. 按Win+R输入regedit打开注册表编辑器
    2. 导航到HKEY_LOCAL_MACHINE\Software
    3. 右键Software → 新建 → 项,命名为JavaSoft
    4. 右键JavaSoft → 新建 → 项,命名为Prefs
    5. 右键Prefs → 权限,给你的当前用户分配「写入」或者「完全控制」权限
    6. 关掉注册表,重新运行命令就ok了
  • 方法3:规避注册表——让Java用本地目录存偏好
    要是不想碰注册表,也可以让Java把偏好设置存在本地文件夹:
    要么在项目根目录的gradle.properties里加一行:

    org.gradle.jvmargs=-Djava.util.prefs.systemRoot=C:\temp\java-prefs -Djava.util.prefs.userRoot=C:\temp\java-prefs
    

    要么直接在命令里加参数:

    gradlew appengineRun -Djava.util.prefs.systemRoot=C:\temp\java-prefs -Djava.util.prefs.userRoot=C:\temp\java-prefs
    

    记得先创建C:\temp\java-prefs这个文件夹哦~

另外,如果你后面的Jetty警告还有完整内容导致服务器启动失败,那得把完整错误贴出来,但目前这个注册表警告本身不是致命问题。

内容的提问来源于stack exchange,提问作者Vinay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:45:50