用途:把目标项目构建成 opentaint 项目模型,供后续分析使用。在需要全新 opentaint 项目模型时使用。所有分析产物固定放在 <project-root>/.opentaint/ 下。
输入:project-root(可选,默认当前目录);build-hints(可选,关于构建方式的已知信息)。仅当必填输入缺失且无合理默认值时才回问调用方。
主要步骤:1) 先删除已有的 .opentaint/project,避免旧模型混入。2) 判断项目如何构建,即构建工具或是否提供预编译产物。3) 重新启用项目禁用的所有模块,使其代码进入模型;启用模块属于改配置而非改源码,模型仍代表当前提交;某模块确实无法编译时才单独排除,并报告启用与排除的模块。4) 首选路径:opentaint compile <project-root> -o .opentaint/project。它会运行项目真实构建,自动解析完整依赖图与模块反应堆,无需手工列依赖或范围;需先配置项目所需的构建工具链。此处失败通常是可修复的构建问题,其包装信息较简略,不应据此判断可否修复,应直接复现项目自身构建以暴露真实错误,修复后再重跑 opentaint compile。5) 最后手段:仅当项目自身构建完全无法通过时,手工构建产物,再用 opentaint project 生成模型,并把分析范围限制在项目代码;需向分析器说明哪些代码属于项目、哪些属于第三方包;范围根应取自代码实际声明而非构建配置或目录结构;务必列出全部第三方包。6) 校验:.opentaint/project/project.yaml 存在且非空,其模块/范围条目覆盖项目自身代码声明的每个根;多模块项目核对模块数量;确认 .opentaint/project/dependencies 已正确解析与下载。7) 约三次修复后仍无法收敛,则报告未收敛并把构建阶段留为 pending,交由编排器介入。
输出:简要报告,包含模型路径、多模块项目的模块数、所选参考定义的语言相关构建字段及成功构建所用取值、构建方式(自动或手工)、为构建改动的构建配置(如重新启用的模块)、若使用 opentaint project 则给出确切构建命令与参数;若未收敛则说明留为 pending 及阻塞错误和修复尝试。
限制:只在 .opentaint/project 下写项目模型,不产生其他文件,不写跟踪状态。模型由 opentaint 生成,禁止手工编辑 project.yaml 或模型目录下任何内容;若要改变分析内容,应修正命令并重建。