1. 项目概述:为什么OpenClaw的本地封装部署值得花一整天认真对待
OpenClaw不是又一个跑个demo就完事的玩具项目。它是一套面向真实业务场景设计的、可插拔式AI工作流编排引擎,核心定位是让非算法背景的工程师或产品同学,能像搭积木一样把大模型能力、工具调用、数据处理、外部API快速组合成可交付的服务。你搜到的“openclaw安装”“openclaw命令”“openclaw本地部署”这些热词背后,藏着大量被Dify、OneAPI这类通用平台卡住脖子的团队——他们需要更轻量、更可控、更贴近自己技术栈的调度层,而不是一个黑盒管理后台。我去年帮三家做金融风控SaaS的客户落地OpenClaw,最深的体会是:封装包本地部署不是为了“能跑”,而是为了“敢上线”。它意味着你能完全掌控模型加载路径、技能插件沙箱、HTTP服务端口、日志落盘位置、甚至内存溢出时的JVM参数。这和在Docker里docker run -p 3000:3000 difyai/dify那种开箱即用有本质区别——后者适合验证想法,前者才是生产环境的起点。尤其当你看到“openclaw : 无法将‘openclaw’项识别为 cmdlet”这种报错时,问题从来不在PowerShell,而在于PATH没加对、JDK版本不匹配、或是Windows下.bat脚本里硬编码了Linux路径分隔符。这篇教程不讲“复制粘贴就能跑”,而是带你从零构建一个可审计、可回滚、可监控的OpenClaw本地运行基座。无论你是刚接触CLI工具的前端同学,还是常年和Nacos、Prometheus打交道的后端老手,只要你的目标是把OpenClaw真正嵌进自己的CI/CD流水线,而不是临时起个服务测个接口,那接下来每一步配置,我都标出了它在真实运维场景中的意义。
2. 整体架构设计与方案选型逻辑
2.1 为什么放弃Docker一键部署,坚持封装包本地化?
网络上大量“openclaw本地docker部署教程”看似省事,但实际踩坑率极高。我统计过最近三个月客户反馈的27个典型问题,其中19个直接源于Docker方案:
- 文件权限地狱:Windows WSL2中挂载宿主机目录后,OpenClaw技能插件目录(
skills/)因UID/GID不一致导致Java进程无权读取.jar文件; - GPU直通失效:Docker默认不启用
--gpus all,而OpenClaw调用本地Ollama或vLLM时需显存直通,强行加参数又引发NVIDIA Container Toolkit版本兼容问题; - 配置热更新失灵:Docker容器内修改
application.yml后,Spring Boot Actuator的/actuator/refresh端点无法触发配置重载,必须重启容器,中断所有正在执行的工作流。
封装包本地部署则彻底规避这些。它本质是把OpenClaw编译后的openclaw-server.jar、预置技能插件、配置模板、启动脚本打包成一个压缩包,解压即用。关键优势在于:
- 路径绝对可控:所有
file://协议的资源路径(如技能代码、Prompt模板、缓存目录)都基于解压根目录计算,不存在容器内外路径映射混乱; - JVM参数精细调控:可直接在
start.sh或start.bat中设置-Xms4g -Xmx8g -XX:+UseG1GC,这对处理长上下文(>32k tokens)的Claude Code类模型至关重要; - 与现有监控体系无缝集成:
jstat -gc <pid>、jstack <pid>、Prometheus JMX Exporter的jmx_url均可直接指向本地Java进程,无需额外暴露容器端口或配置cAdvisor。
提示:如果你的团队已标准化使用Docker Compose管理微服务,建议将OpenClaw封装包部署在专用虚拟机或K8s节点上,通过Service Mesh(如Istio)统一治理流量,而非强塞进Docker容器。这是生产环境最稳妥的折中方案。
2.2 封装包结构设计:不只是jar包,而是一套可交付的运行时环境
一个合格的OpenClaw封装包,绝不能只是openclaw-server.jar丢进去就完事。它必须包含五个核心层级,缺一不可:
| 目录/文件 | 作用 | 生产环境必要性 | 典型错误案例 |
|---|---|---|---|
bin/ | 启动/停止脚本(start.sh/start.bat)、环境检查脚本(check-env.sh) | ★★★★★ | Windows用户直接双击start.bat,未校验JDK版本,导致UnsupportedClassVersionError |
conf/ | application.yml(主配置)、logback-spring.xml(日志)、nacos-config.yaml(若对接Nacos) | ★★★★★ | 配置中server.port: 8080未注释,与公司内部Nginx反向代理端口冲突,服务启动失败 |
lib/skills/ | 已编译的技能插件JAR包(如web-search-skill-1.2.0.jar)、技能元数据JSON文件 | ★★★★☆ | 技能JAR包未签名,OpenClaw安全策略拒绝加载,日志仅显示Skill load failed无具体原因 |
data/ | 运行时数据目录(cache/、logs/、tmp/),必须可写 | ★★★★☆ | Linux下data/目录属主为root,普通用户启动时java.io.IOException: Permission denied |
docs/ | 本封装包专属部署手册(含SHA256校验值、依赖清单、回滚步骤) | ★★★☆☆ | 客户现场升级时,误将旧版application.yml覆盖新版,导致Redis连接池配置丢失 |
这个结构设计源于我们给某省级政务AI平台交付的经验:他们要求每次部署包必须通过等保三级审计,而审计项明确要求“运行时环境与配置分离”、“敏感配置不得硬编码在jar包内”、“所有外部依赖需提供独立校验机制”。因此,我们的封装包强制将conf/与lib/物理隔离,并在bin/check-env.sh中加入三重校验:
java -version | grep "17\|21"确认JDK版本(OpenClaw 2.x仅支持JDK17+);free -g | awk 'NR==2{print $2}'检查可用内存≥12G(低于此值启动脚本自动退出并提示);ls -l conf/application.yml | awk '{print $NF}'校验配置文件最后修改时间是否早于封装包生成时间(防人为误改)。
2.3 本地部署的核心矛盾:灵活性 vs 稳定性,如何取舍?
OpenClaw本地部署最大的认知陷阱,是把“本地”等同于“随意”。实际上,它面临三组尖锐矛盾:
第一组:技能热加载 vs 进程稳定性
OpenClaw支持运行时动态加载新技能JAR,但生产环境严禁这样做。原因很简单:JVM的ClassLoader一旦加载类,其字节码就驻留内存,卸载需触发Full GC且不可控。我们曾遇到客户在凌晨三点热加载一个修复SQL注入漏洞的数据库技能,结果触发JVM元空间(Metaspace)OOM,整个工作流服务雪崩。解决方案是:本地部署必须禁用热加载,在conf/application.yml中强制设置:
openclaw: skill: hot-reload: false # 关键!必须设为false load-on-startup: true # 启动时一次性加载所有skills/所有技能变更必须走完整发布流程:编译新JAR → 替换lib/skills/下对应文件 → 执行bin/stop.sh→bin/start.sh。
第二组:模型直连 vs API网关
热词中高频出现“ollama本地部署教程”“deepseek本地部署”,说明大量用户想让OpenClaw直连本地Ollama。这在开发环境OK,但生产环境必须过API网关。理由有二:
- Ollama默认监听
127.0.0.1:11434,OpenClaw若直连,则其model.url配置为http://localhost:11434,当OpenClaw集群化部署时,各节点会尝试连接自己本机的Ollama(不存在),而非统一的Ollama服务; - 缺少熔断降级能力。Ollama响应超时或崩溃时,OpenClaw工作流会卡死,而API网关(如Spring Cloud Gateway)可配置
timeouts.connect=5000、fallback路由。
因此,本地部署时,我们要求:
- 单独部署Ollama服务(
docker run -d -p 11434:11434 --name ollama ollama/ollama); - 在OpenClaw配置中,
model.url必须指向网关地址,如http://gateway.internal:8080/ollama/; - 网关路由规则需重写路径:
/ollama/**→http://ollama:11434/**。
第三组:配置中心化 vs 本地化
“nacos安装配置和部署教程”热度很高,但Nacos不是必选项。对于中小团队,conf/application.yml本地化更可靠。Nacos的价值在于:
- 多环境配置隔离(dev/test/prod);
- 配置变更实时推送(如调整
openclaw.workflow.timeout=300无需重启); - 配置历史版本追溯(审计刚需)。
如果选择Nacos,本地部署的关键动作是:
conf/bootstrap.yml中配置spring.cloud.nacos.config.server-addr: nacos.internal:8848;- 禁止在
application.yml中再写spring.cloud.nacos相关配置,避免冲突; - 启动前执行
curl -X POST "http://nacos.internal:8848/nacos/v1/cs/configs?dataId=openclaw-prod.yaml&group=DEFAULT_GROUP&content=$(cat conf/application-prod.yml | base64)",确保配置已推送到Nacos。
3. 核心细节解析与实操要点
3.1 JDK版本与环境变量:90%的“无法识别openclaw命令”源于此
几乎所有Windows用户首次执行openclaw start报错“无法将‘openclaw’项识别为cmdlet”,根源都在JDK环境变量。OpenClaw 2.3.0+强制要求JDK 17或JDK 21(LTS版本),而Windows默认的java -version常显示JDK 8或11。这不是OpenClaw的问题,是Java生态的版本碎片化现实。
实操步骤(Windows 10/11):
下载并安装JDK 21:从 Oracle官网 或 Eclipse Temurin 下载Windows x64 MSI安装包,务必勾选“Add to PATH”;
验证安装:打开新CMD窗口,执行:
java -version # 正确输出应为:java version "21.0.3" 2024-04-16 LTS echo %JAVA_HOME% # 正确输出应为:C:\Program Files\Eclipse Adoptium\jdk-21.0.3.9-hotspot注意:
%JAVA_HOME%必须指向JDK根目录(含bin/java.exe),而非bin子目录。常见错误是手动设置JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-21.0.3.9-hotspot\bin,导致后续脚本找不到java命令。修正OpenClaw启动脚本:打开
bin/start.bat,找到set JAVA_CMD=java这一行,在其上方添加:@echo off if not defined JAVA_HOME ( echo ERROR: JAVA_HOME is not set. Please install JDK 21 and set JAVA_HOME. exit /b 1 ) set JAVA_CMD=%JAVA_HOME%\bin\java.exe这样当
JAVA_HOME未设置时,脚本会明确报错,而非静默失败。
Linux/macOS用户注意事项:
- macOS Monterey及更高版本默认禁用Rosetta转译,若下载的是x64 JDK但Mac是Apple Silicon芯片,需下载ARM64版本,否则
java -version报错zsh: killed; - Ubuntu 22.04默认
apt install openjdk-17-jdk安装的是OpenJDK 17.0.1,但OpenClaw 2.3.0要求17.0.3+,必须手动下载Temurin JDK 17.0.7; - 关键检查命令:
readlink -f $(which java),输出应为/opt/java/jdk-17.0.7+7/bin/java,而非/usr/bin/java(系统自带软链接)。
3.2 application.yml配置详解:那些文档里不会写的致命参数
OpenClaw官方文档对application.yml的说明过于简略,而生产环境90%的故障源于几个隐藏参数。以下是必须修改的七处核心配置,附带原理和后果:
1.server.port与server.address
server: port: 8081 # 绝对不要用8080!公司内部8080常被Nginx或旧服务占用 address: 0.0.0.0 # 必须设为0.0.0.0,否则Windows下仅监听127.0.0.1,外部无法访问原理:Spring Boot默认address为localhost,在Docker或某些Linux发行版中会绑定到127.0.0.1,导致同一局域网内其他机器无法调用OpenClaw API。
2.spring.profiles.active
spring: profiles: active: prod # 开发环境用dev,生产环境必须设为prod后果:prodprofile会启用HikariCP连接池、禁用Actuator调试端点、开启日志异步刷盘。若设为dev上线,高并发下磁盘IO会成为瓶颈。
3.logging.file.name
logging: file: name: ../data/logs/openclaw.log # 路径必须相对于jar包所在目录,../表示上一级原理:OpenClaw启动时,java -jar openclaw-server.jar的当前工作目录是bin/,而日志需写入data/logs/,故需../data/logs/。若写成./data/logs/,日志会生成在bin/data/logs/下,监控脚本找不到。
4.openclaw.model.base-url
openclaw: model: base-url: http://gateway.internal:8080/ollama/ # 指向API网关,非Ollama直连 timeout: 120000 # 模型响应超时设为120秒,避免长文本生成被中断注意:base-url末尾必须带/,否则OpenClaw拼接/api/chat/completions时变成http://.../ollama/api/chat/completions(多了一个/ollama/)。
5.spring.redis连接池
spring: redis: host: redis.internal port: 6379 password: ${REDIS_PASSWORD:} # 密码从环境变量读取,绝不硬编码 lettuce: pool: max-active: 50 # 默认8,高并发下Redis连接耗尽 max-wait: 3000 # 获取连接最大等待3秒,超时抛异常而非死等实测数据:某客户工作流峰值QPS 200,max-active=8时Redis连接池满,redis.clients.jedis.exceptions.JedisConnectionException错误率100%;调至50后错误归零。
6.management.endpoints.web.exposure.include
management: endpoints: web: exposure: include: health,info,metrics,prometheus,threaddump # 必须暴露prometheus供监控 endpoint: prometheus: scrape-interval: 15s # Prometheus拉取间隔,15秒足够安全提醒:绝不能暴露env、configprops、heapdump端点,这些会泄露敏感配置和JVM内存快照。
7.openclaw.skill.plugin-dir
openclaw: skill: plugin-dir: ../lib/skills/ # 技能插件目录,必须以../开头,指向封装包内路径致命错误:若写成./lib/skills/,在bin/目录下执行./start.sh时,路径解析为bin/lib/skills/(不存在);写成../lib/skills/才正确指向封装包根目录下的lib/skills/。
3.3 技能插件(Skill)的本地化加载机制
OpenClaw的“技能”不是简单的函数调用,而是一个完整的Java模块,具备独立依赖、生命周期和安全沙箱。本地部署时,技能加载失败是第二大高频问题(仅次于JDK版本)。
技能JAR包的构成规范:
一个合规的技能JAR(如web-search-skill-1.2.0.jar)必须包含:
META-INF/MANIFEST.MF:声明OpenClaw-Skill-Name: WebSearch、OpenClaw-Skill-Version: 1.2.0;skill.json:技能元数据,定义输入参数、输出Schema、认证方式;com/example/skill/WebSearchSkill.class:实现Skill接口的主类;lib/子目录:存放该技能独有的依赖(如httpclient-4.5.14.jar),不得与OpenClaw主程序的依赖冲突。
本地加载的三大校验环节:
- 签名验证:OpenClaw启动时,会检查JAR包是否由可信密钥签名。若未签名,日志报
Skill signature verification failed。生成签名命令:jarsigner -keystore mykey.jks -storepass mypass web-search-skill-1.2.0.jar myalias - 依赖隔离:OpenClaw使用自定义
URLClassLoader加载技能,确保web-search-skill中的org.apache.http.client.HttpClient不会覆盖主程序的okhttp3.OkHttpClient。验证方法:启动后访问http://localhost:8081/actuator/skills,返回JSON中每个技能的classLoader字段应为org.springframework.boot.loader.LaunchedURLClassLoader的子类。 - 权限控制:默认禁止技能执行
Runtime.getRuntime().exec()、FileOutputStream写任意路径。若技能需写文件,必须在skill.json中声明:
否则调用时抛{ "permissions": ["file-write:/tmp/websearch/"] }java.security.AccessControlException。
实操技巧:快速验证技能是否加载成功
无需启动整个OpenClaw,用以下命令单独测试:
# 进入封装包根目录 java -cp "openclaw-server.jar:lib/skills/web-search-skill-1.2.0.jar" \ org.openclaw.skill.SkillLoaderTest \ --skill-path lib/skills/web-search-skill-1.2.0.jar该测试类会模拟OpenClaw加载流程,输出Skill loaded successfully: WebSearch或具体错误堆栈,比看日志高效十倍。
4. 实操过程与核心环节实现
4.1 封装包制作全流程:从源码到可交付物
网络上“openclaw安装教程”大多跳过封装包制作,直接给现成包。但生产环境必须掌握自制流程,因为:
- 官方包可能不含你定制的技能;
- 安全审计要求提供构建证明(SBOM);
- 版本回滚需精确到commit hash。
前置条件检查:
- Maven 3.8.6+(
mvn -v验证); - Node.js 18.x(用于构建前端控制台,若不需要可跳过);
- Git LFS(若项目含大模型权重文件)。
步骤分解(以OpenClaw 2.3.0为例):
克隆并检出稳定分支
git clone https://github.com/openclaw/openclaw.git cd openclaw git checkout v2.3.0 # 严禁用main分支,不稳定构建后端服务jar包
# 清理并构建,跳过测试(生产环境测试非必需) mvn clean package -Dmaven.test.skip=true -Pprod # 输出:openclaw-server/target/openclaw-server-2.3.0.jar关键参数解释:
-Pprod:激活Maven Profile,启用生产环境配置(如HikariCP、Logback异步日志);-Dmaven.test.skip=true:跳过单元测试,节省时间;若要运行测试,改用-DskipTests(跳过执行,但编译测试类)。
准备技能插件
假设你有一个自研技能my-db-skill:# 进入技能目录 cd ../my-db-skill # 构建技能JAR(需包含MANIFEST.MF和skill.json) mvn clean package # 复制到OpenClaw封装包技能目录 cp target/my-db-skill-1.0.0.jar ../openclaw/openclaw-server/src/main/resources/skills/生成标准封装包结构
在openclaw/目录下创建脚本build-dist.sh:#!/bin/bash VERSION="2.3.0" DIST_DIR="openclaw-$VERSION-dist" # 创建目录结构 mkdir -p $DIST_DIR/{bin,conf,lib/skills,data/logs,data/cache,data/tmp,docs} # 复制主jar包 cp openclaw-server/target/openclaw-server-$VERSION.jar $DIST_DIR/lib/ # 复制技能插件(从resources/skills/或外部目录) cp openclaw-server/src/main/resources/skills/*.jar $DIST_DIR/lib/skills/ # 复制配置模板 cp openclaw-server/src/main/resources/application.yml $DIST_DIR/conf/ cp openclaw-server/src/main/resources/logback-spring.xml $DIST_DIR/conf/ # 复制启动脚本(需提前编写好start.sh/start.bat) cp scripts/start.sh $DIST_DIR/bin/ cp scripts/start.bat $DIST_DIR/bin/ # 生成校验文件 sha256sum $DIST_DIR/lib/openclaw-server-$VERSION.jar > $DIST_DIR/docs/SHA256SUMS # 打包 tar -czf openclaw-$VERSION-dist.tar.gz $DIST_DIR echo "Build complete: openclaw-$VERSION-dist.tar.gz"执行
chmod +x build-dist.sh && ./build-dist.sh,生成openclaw-2.3.0-dist.tar.gz。验证封装包完整性
解压后,进入openclaw-2.3.0-dist/,执行:# 校验jar包完整性 sha256sum -c docs/SHA256SUMS # 检查技能JAR是否可被Java识别 jar -tf lib/skills/my-db-skill-1.0.0.jar | head -5 # 检查配置文件语法(YAML格式) yamllint conf/application.yml任一检查失败,立即终止发布流程。
4.2 Windows本地部署实录:从零开始的每一步截图级操作
Windows是OpenClaw部署问题最集中的平台,尤其Win10/Win11家庭版。以下为真实客户环境(Dell XPS 9520, 32GB RAM, Win11 22H2)的完整操作记录,跳过所有“应该知道”的假设。
Step 1:安装JDK 21(无界面静默安装)
- 下载 Eclipse Temurin JDK 21.0.3 ;
- 右键MSI文件 → “属性” → 勾选“解除锁定” → 点击“确定”;
- 以管理员身份运行CMD:
msiexec /i OpenJDK21U-jdk_x64_windows_hotspot_21.0.3_9.msi /quiet INSTALLDIR="C:\Program Files\Eclipse Adoptium\jdk-21.0.3.9-hotspot\" ADDLOCAL=FeatureJavaHome,FeatureEnvironment,FeatureJarFileRunWith/quiet参数实现无界面安装,ADDLOCAL确保安装JavaHome和环境变量。
Step 2:解压封装包并修正路径
- 将
openclaw-2.3.0-dist.tar.gz解压到C:\openclaw\(路径中不能有空格或中文,否则start.bat中%~dp0解析错误); - 进入
C:\openclaw\bin\,用记事本打开start.bat,将第12行:set JAVA_CMD=java
改为:set JAVA_CMD="C:\Program Files\Eclipse Adoptium\jdk-21.0.3.9-hotspot\bin\java.exe"
(加引号解决路径含空格问题)
Step 3:配置application.yml(针对Windows特殊处理)
- 用VS Code打开
C:\openclaw\conf\application.yml; - 修改
logging.file.name:logging: file: name: ..\\data\\logs\\openclaw.log # Windows用双反斜杠\\,Linux用/ - 修改
openclaw.skill.plugin-dir:openclaw: skill: plugin-dir: ..\\lib\\skills\\ # 同样用双反斜杠
Step 4:首次启动与日志分析
- 以管理员身份运行CMD,进入
C:\openclaw\bin\; - 执行:
start.bat; - 观察控制台输出,关键成功标志:
Started OpenClawApplication in 12.345 seconds (process running for 13.678) OpenClaw server started on http://0.0.0.0:8081 Loaded 7 skills from ..\lib\skills\ - 若卡在
Starting service [Tomcat],检查server.address: 0.0.0.0是否配置; - 若报
Failed to bind to 0.0.0.0:8081,执行netstat -ano | findstr :8081查占用进程,用taskkill /PID <PID> /F结束。
Step 5:验证API可用性
- 打开浏览器,访问
http://localhost:8081/actuator/health,返回:{"status":"UP","components":{"diskSpace":{"status":"UP","details":{"total":512345678901,"free":234567890123,"threshold":10485760}}}} - 使用curl测试工作流:
返回curl -X POST "http://localhost:8081/v1/workflows/run" ^ -H "Content-Type: application/json" ^ -d "{\"workflowId\":\"test-flow\",\"input\":{\"query\":\"Hello World\"}}"{"result":"success","executionId":"exec-abc123"}即成功。
4.3 Linux/macOS部署关键差异点
虽然流程相似,但Linux/macOS有三个必须处理的差异点:
1. 文件权限与SELinux(CentOS/RHEL)
- 解压后,执行:
chmod -R 755 openclaw-2.3.0-dist/ chown -R appuser:appgroup openclaw-2.3.0-dist/ - 若启用了SELinux,需恢复文件上下文:
否则restorecon -Rv openclaw-2.3.0-dist/data/目录写入失败,日志报Permission denied。
2. macOS Gatekeeper绕过
- macOS Monterey+默认阻止未签名脚本执行,
start.sh会报command not found; - 解决方案:右键
start.sh→ “显示简介” → 勾选“允许从任何来源”(需先在系统设置→隐私与安全性中解锁); - 或终端执行:
xattr -d com.apple.quarantine openclaw-2.3.0-dist/bin/start.sh
3. systemd服务化(生产环境强制要求)
创建/etc/systemd/system/openclaw.service:
[Unit] Description=OpenClaw AI Workflow Server After=network.target [Service] Type=simple User=appuser WorkingDirectory=/opt/openclaw ExecStart=/opt/openclaw/bin/start.sh Restart=on-failure RestartSec=10 Environment="JAVA_HOME=/opt/java/jdk-21.0.3" Environment="OPENCLAW_OPTS=-Xms4g -Xmx8g" [Install] WantedBy=multi-user.target启用服务:
sudo systemctl daemon-reload sudo systemctl enable openclaw sudo systemctl start openclaw sudo systemctl status openclaw # 查看实时日志优势:开机自启、进程崩溃自动重启、日志统一由journalctl管理(journalctl -u openclaw -f)。
5. 常见问题与排查技巧实录
5.1 “openclaw命令无法识别”问题速查表
| 现象 | 根本原因 | 排查命令 | 解决方案 |
|---|---|---|---|
openclaw : 无法将“openclaw”项识别为 cmdlet | Windows PowerShell未将openclaw加入PATH,或openclaw.ps1被系统策略禁用 | Get-ExecutionPolicy | 在PowerShell中执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,然后用CMD运行start.bat |
bash: openclaw: command not found | Linux/macOS未将bin/目录加入PATH,或start.sh无执行权限 | echo $PATH,ls -l bin/start.sh | export PATH="/path/to/openclaw/bin:$PATH",chmod +x bin/start.sh |
java: command not found | JDK未安装或JAVA_HOME未设置 | which java,echo $JAVA_HOME | 下载JDK并设置export JAVA_HOME=/path/to/jdk,export PATH=$JAVA_HOME/bin:$PATH |
Error: Could not find or load main class org.openclaw.OpenClawApplication | openclaw-server.jar损坏,或MANIFEST.MF中Main-Class缺失 | jar -tf lib/openclaw-server.jar | grep MANIFEST | 重新构建jar包,确保src/main/resources/META-INF/MANIFEST.MF含Main-Class: org.openclaw.OpenClawApplication |
5.2 启动失败的五大核心日志线索
OpenClaw启动失败时,日志往往很长,但只需关注以下五处关键线索:
线索1:Caused by: java.lang.UnsupportedClassVersionError
- 含义:JDK版本过低,无法加载高版本编译的class;
- 定位:日志中
Caused by:行之后的第一行; - 解决:确认
java -version输出≥JDK 17,若用JDK 11,必须升级。
线索2:Failed to bind to 0.0.0.0:8081
- 含义:端口被占用;
- 定位:日志末尾几行;
- 解决:
lsof -i :8081(macOS/Linux)或netstat -ano \| findstr :8081(Windows),kill -9 <PID>。
线索3:java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
- 含义:
application.yml语法错误(如缩进不对、