如何用boot-clj自动生成Clojure项目依赖版权信息?
解决Boot构建Clojure/ClojureScript项目时自动生成依赖版权信息的问题
我之前维护一个多依赖的Clojure/ClojureScript项目时,完全懂你手动整理版权清单的痛苦——不仅耗时,还经常因为依赖更新漏改信息。后来摸索出几个实用方案,分享给你:
方案1:编写自定义Boot任务调用许可证信息库
Clojure生态里有个license-info库,可以从Maven仓库拉取依赖的许可证元数据。我们可以基于它写一个Boot任务自动生成报告:
- 首先在
build.boot里添加依赖:
(set-env! :dependencies '[ [org.clojars.sattvik/license-info "0.1.0"] ;; 你的其他项目依赖... ])
- 定义生成许可证报告的任务:
(deftask generate-licenses "自动生成项目依赖的许可证信息报告" [] (with-pre-wrap fs (let [;; 获取项目所有依赖 deps (get-env :dependencies) ;; 批量拉取每个依赖的许可证信息 license-details (map (fn [[group artifact version]] (license-info.core/get-license-info group artifact version)) deps) ;; 格式化报告内容 report-text (str "# 项目依赖许可证报告\n\n" (clojure.string/join "\n---\n" (map (fn [detail] (str "### " (:artifact detail) " v" (:version detail) "\n" "- 组ID: " (:group detail) "\n" "- 许可证类型: " (:name detail) "\n" "- 许可证URL: " (:url detail))) license-details)))] ;; 将报告写入临时文件,最终会被包含在构建产物中 (spit (fs/tmp-file fs "dependency-licenses.md") report-text) fs)))
- 把这个任务集成到你的构建流程里,比如打包时自动生成:
(deftask package [] (comp (generate-licenses) (aot :namespace '#{your.project.main}) (pom) (jar)))
运行boot package时,就会自动生成dependency-licenses.md并打包到产物里。唯一要注意的是,部分小众依赖可能在Maven仓库里没有完善的许可证元数据,这时候需要手动补充,但主流库基本都能正常识别。
方案2:用通用许可证扫描工具辅助
如果不想写自定义任务,可以用license-finder这个跨语言的许可证扫描工具。它支持识别Clojure项目的依赖,只需在Boot构建完成后,在项目目录运行:
license-finder report --format=markdown --output=licenses.md
这个工具会自动扫描所有依赖并生成结构化报告,还能帮你检测许可证合规性。唯一需要微调的是,可能要配置它识别Boot的依赖目录(默认是~/.m2/repository),一般默认配置就能工作。
方案3:长期迁移到tools.deps(可选)
如果项目有迁移空间,切换到tools.deps构建体系后,可以用clj-licenses工具,它能直接基于deps.edn生成非常详细的许可证报告,支持导出HTML、JSON等多种格式,使用起来更省心:
clj -Sdeps '{:deps {com.github.liquidz/clj-licenses {:mvn/version "0.11.0"}}}' -m clj-licenses.core --output licenses.html
不管选哪个方案,建议把生成报告的步骤固化到构建脚本里,这样每次构建都会自动更新版权信息,彻底告别手动维护的麻烦。
内容的提问来源于stack exchange,提问作者Stefan Kamphausen
相关产品推荐
相关产品推荐

