CLI 使用手册
一、命令行获取
1.1.工具下载
登录清源 SCA 社区版 web 页面,点击右侧下载图标,选择工具下载,如图所示:

1.2.环境要求
软件环境:jdk8 及以上。
1.3.系统兼容性
支持 Linux/Windows/Mac 系统。
1.4.系统编码
Windows 下使用清源命令行(CLI)需要将编码改成 UTF-8。
二、功能说明
命令行工具支持连接 web 服务创建检测任务。
2.1.创建源码扫描任务
使用步骤: 执行以下命令,填入相关参数:
java -jar cleansource_sca_build_scan.jar --taskDir=***** --username=**** --password=**** --logLevel=***** --outputPath=****| 参数 | 说明 | 限定值 |
|---|---|---|
| username | Web 端用户名 | 必填 (当前 cli 仅支持邮件方式登录) |
| password | Web 端用户名对应的密码 | 必填 |
| logLevel | 日志级别 | 非必填(TRACE, DEBUG, INFO)默认值 INFO |
| taskDir | 扫描文件路径 | 必填,需填写绝对路径 |
| outputPath | 临时文件输出目录(日志文件,解压文件等) | 非必填(默认输出在系统用户目录下) |
三、包管理器说明
包管理器通常用于操作系统或编程语言的生态系统中。它可以从官方软件源或其他可信的软件仓库获取软件包依赖,不同的包管理器会有不同的检测器以获取项目里面引用的依赖。
3.1.包管理器支持情况
| 包管理器 | 语言 | 构建类型 | 检测原理 |
|---|---|---|---|
| Maven | Java | 构建 | Maven检测器需要mvn或者mvnw可执行程序 执行mvn dependency:tree命令获取日志输出,解析标准的依赖日志输出,自定义的输出会使解析失效 |
| 非构建 | 若Maven检测器执行命令失败,则会去解析目录下的pom.xml里面的依赖信息。 | ||
| Pip | Python | 构建 | Pip检测器需要项目路径下找到setup.py 文件或 requirements.txt。 1. 需要提前完成依赖的下载——在对应目录下执行python setup.py install (有setup.py文件执行)或者pip install -r requirements.txt (有requirements.txt 文件执行)。 2. Pip检测器需要python和pip可执行程序。 a) 需要在Path环境变量里面配置python和pip对应的执行程序路径执行Pip包管理工具解析依赖树信息。 |
| 非构建 | 若pip检测器执行命令失败,则会解析目录下的requirements.txt里面的依赖信息。 | ||
| Pipenv | Python | 构建 | Pipenv 检测器在项目中找到Pipfile或Pipfile.lock文件。 1. Pipenv 检测器需要Python和Pipenv可执行文件,如没有配置pipenv则需要在当前项目下执行pip install pipenv 命令。 2. 当在项目目录下运行相关 Pipenv 命令时(如 pipenv install),Pipenv 首先查找 Pipfile。如果找到,它将根据该文件中列出的依赖来创建或更新 Pipfile.lock,并安装依赖。 3. 如果还没有 Pipfile,Pipenv 将在执行安装任何包时创建它。 4. Pipfile.lock 文件是自动生成的,用来确保所有开发和部署环境中的依赖版本一致,防止因版本不同导致的问题。 |
| 非构建 | 若pipenv检测器执行命令失败,则会解析目录下的Pipfile.lock里面的依赖信息。 | ||
| Go mod | Go | 构建 | Go mod检测器利用Go mod程序去检测go项目的依赖关系。 1. 安装有go可执行程序。 2. go安装程序的bin目录添加环境变量项目下需要有go.mod文件。 |
| 非构建 | 若Go mod构建执行失败,则会查找go.mod文件以获取依赖信息。 | ||
| Go dep | Go | 构建 | 不支持 |
| 非构建 | 使用Go dep管理依赖。且存在外部可执行文件,例如:Go、DEP等。 Go dep检测器会去发现项目下的 Gopkg.lock 文件,并解析 Gopkg.lock 以获取依赖项。 | ||
| Go vendor | Go | 构建 | 不支持 |
| 非构建 | 使用Go vendor管理依赖,检测发现项目下的vendor.json文件,对其进行解析以后获取依赖项。 |
四、常见问题
4.1.日志乱码
Windows 默认编码为 gbk 可能会导致编码问题,需要将系统编码改成 UTF-8。
Windows 设置方法:
首先打开注册表编辑器

找到:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor 目录下

新增 autorun 字符串值文件 数值数据填写 chcp 65001>nul

4.2.创建任务报错“Too many open files”
从客户端窗口或 CLI 输出信息中,可以看到类似报错信息: 
出错的原因是 CLI 进行文件处理时,系统所有进程已打开的文件句柄数超过了操作系统的“可打开文件句柄最大数量”值,引发了报错。
通过如下命令行获取进程已打开文件句柄数:
- 获取 CLI 进程打开的文件句柄数
lsof -n | grep CLI进程号| wc -l如:
lsof -n | grep 2529173| wc -l
1155945- 获取系统所有进程打开的文件句柄数(结果第一列为句柄数,第二列为进程号)
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
1155945 2529173
369072 713430
290250 621470
14025 430965
12888 3517209
8304 3520477
6840 123989
3015 1231144
3015 1231127
3015 1231111
3015 1231095通过命令行修改“可打开文件句柄最大数量”值。有两种可选方案:
当前会话(shell session)生效
- 修改上限值:ulimit -n 1000000
- 确认是否生效:ulimit -a
- 该方案只对当前会话一次性生效,会话退出后即失效
系统永久生效
- 修改/etc/security/limits.conf 文件,末尾加上这两行
txtroot soft nofile 1000000 root hard nofile 1000000- 重启宿主机(是否需要重启因操作系统而异)
- 执行 ulimit -a 验证 open files 数值是否生效
- 创建任务失败(权限不足) 修改信任库文件访问权限 777: JDK 1.8,默认的 Trust Store 是位于
$JAVA_HOME/lib/security/cacerts: 修改权限:
chmod 777 cacertsJDK 11, 默认的 Trust Store 的路径应该是:/etc/ssl/certs/java/cacerts
- 执行任务异常:java.lang.OutOfMemoryError
报错信息类似:
解决方案: 执行 CLI 时,增加 JVM 堆内存参数,避免大项目扫描报 OOM 内存溢出, 命令示例: 
参数说明: Xms:指设定程序启动时占用内存大小 Xmx:指设定程序运行期间最大可占用的内存大小