Jenkins自动编译Delphi项目报错:找不到System.pas或.dcu文件
解决Jenkins构建Delphi项目时的"Unit not found: 'System.pas'"问题
这种情况我碰到过好几次——本地IDE编译顺得很,一到Jenkins就掉链子,核心原因就是Jenkins的运行环境没拿到Delphi编译所需的环境变量和路径配置。给你几个靠谱的解决方向:
1. 先加载RAD Studio的环境配置脚本
Delphi的命令行编译依赖一堆环境变量,IDE启动时会自动跑rsvars.bat来配置,但Jenkins的进程默认不会继承这些。你要在编译前手动调用这个脚本:
把你的Jenkins批处理命令改成这样:
call "C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\bin\rsvars.bat" cd "C:\Users\carlos.santos\Desktop\teste" call build.bat
要是Jenkins是用服务运行的,记得检查服务的登录用户能不能访问RAD Studio的安装目录,最好把环境变量设成系统级的,避免用户权限问题。
2. 给命令行编译指定明确的库路径
如果你的build.bat里直接用dcc32编译,可能得手动指定System.pas所在的路径。比如把编译命令改成:
dcc32 -U"C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\lib;C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\lib\win32\release" Project1.dpr
-U参数就是告诉编译器去哪找单元文件,把Delphi的lib目录(包括win32子目录)加进去就行。
3. 排查Jenkins运行用户的权限问题
有时候Jenkins用的服务用户没权限读取Delphi的库文件或者你的项目文件,也会报找不到单元的错。你可以:
- 打开服务管理器,找到Jenkins服务,查看它的登录用户是谁;
- 用这个用户登录系统,手动跑一遍
build.bat,如果也报错,那就是权限或者环境变量的问题,调整权限即可。
4. 同步IDE和命令行的搜索路径
IDE里能编译,说明搜索路径是对的,但命令行编译不会自动用IDE的配置。你可以:
- 打开项目的
Project Options,找到Delphi Compiler下的Search Path,把里面的路径复制出来,加到build.bat的编译命令里(用-U参数); - 检查项目里有没有相对路径,确保在Jenkins的工作目录下这些路径是有效的。
内容的提问来源于stack exchange,提问作者Carlos Henrique
相关产品推荐
相关产品推荐

