Apache Rat 0.18 介绍与选型指南

介绍 Apache Rat 0.18(Apache Creadur 项目的许可证审计工具,2026-03-11 发布):启发式许可证审计定位、核心引擎与 CLI/Ant/Maven 三种使用形态、0.18 的 Java 17 基线与 UTF-8/XHTML5 报告变更、官方下载与快速上手路径、适用限制,以及与 ScanCode Toolkit/FOSSA/license-checker 的量化选型对比。全部版本与社区数据于 2026-10-19 联网实查。

Apache RatRatApache许可证审计2026/10/19

Apache Rat 0.18 介绍与选型指南

目标:基于官方发布信息讲清 Apache Rat(Apache Creadur 项目的许可证审计工具)的定位、架构、特性与适用边界,并给出与同类许可证合规工具的量化选型对比。本文为认知篇,全部论断基于 Creadur 官方站点、GitHub Releases 联网溯源(查询日期 2026-10-19),不做本地安装实测。

一、信息基准

二、软件概述

2.1 项目定位与版本

Apache Rat(基准版本 0.18,2026-03-11 发布)是一款发布审计工具(release audit tool),用于检查源码树/发行物中的许可证声明、版权标注与许可证类别合规性。官方在发布说明中明确定位其方法论:Rat 是启发式的(heuristic),会对可能的问题做猜测,既会产生误报,也无法发现所有问题,报告需要人来解读。它最初诞生于 Apache Incubator 的发行物 IP 审查实践(RAT 即 Release Audit Tool),后被广泛用于各开源项目在发版流程中自查许可证头。

2.2 版本节奏(实查)

GitHub tags/releases 记录的近代版本序列:0.13(2018-10-13)→ 0.14(2022-05-28)→ 0.15(2022-08-31)→ 0.16(2023-12-28)→ 0.16.1(2024-01-24)→ 0.17(2025-10-17)→ 0.18(2026-03-11)。2022 年后进入约数月到一年一个 minor 的持续维护节奏,0.17 与 0.18 间隔约 5 个月(来源:https://github.com/apache/creadur-rat/tags.atom ,查询日期 2026-10-19)。

2.3 0.18 版本要点(据官方发布说明)

  • 修复 0.17 中出现的严重性能问题:将 Tika 字符集探测采样从 12,000 字节降到 256 字节,显著提升扫描 I/O 性能;
  • 构建语言级别提升到 Java 17(官方同时建议至少 JDK 21 构建,因 RAT-497 记录的 Javadoc 问题);默认字符集改为 UTF-8;
  • 报告输出改为 XHTML5,Maven 插件降噪;PDF 文件按二进制处理;新增 Gradle 项目标准排除集;
  • 升级 Apache Tika 至 3.2.3(处理 CVE-2025-66516)等一批依赖安全更新。

三、核心架构

3.1 引擎与 UI 分层

Rat 的结构是"一个审计引擎 + 多种调用形态":

  • 核心引擎:目录/归档遍历(可深入扫描 jar 等归档内的嵌套文件)、文档类型判定(基于 Apache Tika 的 MIME/文本-二进制识别)、许可证匹配器(默认许可证族 + 自定义许可证定义、Copyright 匹配器)、统计与报告生成(计数器、XSD 校验的 XML 报告、多种输出样式)。
  • 三种 UI 形态:CLI(java -jar apache-rat-0.18.jar)、Maven 插件(绑定构建流程)、Ant 任务;0.17 起官方对三种 UI 的参数与配置做了统一化(harmonization),0.18 延续。核心也可作为库被质量工具集成(官方注明 0.x 之间不保证二进制兼容)。

3.2 排除与报告体系

  • 排除体系:内置 Eclipse/IDE、Maven、Gradle 等标准排除集合,支持 .gitignore 解析、全局 gitignore、按路径/大小(--input-exclude-size)排除;
  • 报告样式:plain-rat(默认)、missing-headers(缺许可证头文件清单)、unapproved-licenses(未批准许可证清单),CLI 经 --output-style 切换;报告含 AL(已批准许可证)、???(未知许可证)等分类计数与文件明细;
  • 门禁能力:支持为计数器配置最小/最大阈值(如允许的未批准许可证数量上限),配合退出码实现 CI 门禁。

四、关键特性

以下特性依据官方站点与 0.17/0.18 发布说明归纳(查询日期 2026-10-19):

  • 启发式审计:自动识别文本/二进制(Tika 驱动),对源码头、LICENSE/NOTICE 声明做许可证匹配,输出按许可证族聚合的统计报告;
  • 默认拒收 GPL 族:默认将 GPL 许可族标记为不批准(与 ASF 发版政策一致),copyleft 需显式开启才纳入批准;
  • 三种使用形态统一配置:同一套参数语义覆盖 CLI/Maven/Ant;
  • 归档深扫:可对 jar/zip 等归档文件解包审计嵌套内容的许可证头;
  • XML/XSD 报告:机器可读报告带 XSD,便于脚本预处理(0.17 起计数器可配置);
  • 现代基线:Java 17 语言级别、UTF-8 默认编码、XHTML5 报告。

五、快速上手

以下为官方下载页与发布说明给出的获取与运行路径(转述,未做本地实测;来源:https://creadur.apache.org/rat/download_rat.cgi 与 0.18 发布说明,查询日期 2026-10-19):

  1. 下载:从官方下载页取 apache-rat-0.18-bin.tar.gz(或 zip),并用同目录 .sha512/.asc 与 KEYS 文件校验;
  2. 运行 CLI:解压后以 Java 17+ 运行 java -jar apache-rat-0.18.jar <目录或归档>;无参数运行不再抛异常,官方引导使用 --help 查看参数;
  3. Maven 集成:在 pom.xml 中配置 org.apache.rat:apache-rat-plugin 并绑定 rat:check 目标,构建期生成报告并按阈值判定;
  4. 报告解读:优先看 ???(未知许可证)与未批准许可证计数,逐文件核对许可证头,按需用 --output-style missing-headers 定位缺失清单。

💡 提示:0.18 要求 Java 17 语言级别;从 0.16 及更早版本升级的用户应阅读官方迁移指南(https://creadur.apache.org/rat/apache-rat/migration-guide.html ),0.17 对参数与报告结构有较大调整。

六、适用场景与限制

适用场景:

  • ASF 项目及一般开源项目发版前的许可证头/版权标注自查,直接对接 Apache 发版惯例;
  • CI 门禁:以退出码与计数阈值拦截未声明许可证的新增文件;
  • 对发行物(含嵌套 jar 归档)做快速许可证头普查。

限制与注意:

  • 启发式而非法律结论:官方明确会产生误报且无法穷尽问题,报告必须人工解读,不能替代专业许可证合规审计;
  • 只看声明、不识别代码来源:它检查"文本上是否有许可证声明",不做依赖图分析,也不维护许可证数据库(这与 ScanCode/FOSSA 的定位差异,见第七章);
  • 0.x 二进制不兼容:作为库集成时,官方不保证 0.x 版本间二进制兼容;
  • Java 17 基线:运行/构建环境需满足新 JDK 要求,老环境需停在 0.16.x。

七、同类选型对比

工具许可GitHub Stars贡献者最近发版版本节奏兼容矩阵要点
Apache Rat 0.18Apache-2.041390.18(2026-03-11)2022 后数月至一年一个 minorJava 17+;CLI/Maven/Ant;面向源码树与归档的声明审计
ScanCode Toolkit v32.5.0Apache-2.02.6k350v32.5.0 稳定(另有 v32.6.0rc8、v33.0.0rc1 预发布)持续发版,库组件(commoncode 等)滚动更快Python 3.x CLI + JSON/SPDX 输出;内置许可证/版权检测数据库,可识别文件级许可证与版权行
FOSSA(fossa-cli v3.20.4)商业平台 + 开源 CLI1.5k—v3.20.4(2026-10-16)高频多语言依赖图扫描 + 组织级合规策略;CLI 上报、平台分析
license-checker 25.0.1BSD-3-Clause——25.0.1(npm 最后发布约 2022-06)已停滞Node.js 生态;遍历 node_modules 产出许可证 JSON 汇总

数据来源:GitHub Releases/Tags Atom 流(https://github.com/aboutcode-org/scancode-toolkit/releases.atom 、https://github.com/fossas/fossa-cli/releases.atom )、npm registry(https://registry.npmjs.org/license-checker )、各项目官网与仓库页面,星标/贡献者数取自 shields.io GitHub badges,查询日期 2026-10-19。

选型建议:目标是"发版前自查许可证头、贴合 Apache 发版流程、零依赖轻量集成",选 Apache Rat;需要识别文件级许可证与版权、输出 SPDX/SBOM 风格清单、覆盖大量许可证数据库条目,选 ScanCode Toolkit;需要组织级依赖图合规策略、审批流与持续监控(可接受商业采购),选 FOSSA;只是 Node 项目想快速列出依赖许可证且不在乎维护停滞,可用 license-checker。三者在"源码头审计 / 深度许可证识别 / 组织合规平台"三个层次上并不互斥,成熟团队常见 Rat(发版门禁)+ ScanCode/FOSSA(合规分析)组合。

八、参考链接