akka-core 依赖安全治理:artifact-bom 目录与 sbt-artifact-bom 插件生成 Maven BOM 的工程实践解析
akka-core 依赖安全治理artifact-bom 目录与 sbt-artifact-bom 插件生成 Maven BOM 的工程实践解析【免费下载链接】akka-coreA platform to build and run apps that are elastic, agile, and resilient. SDK, libraries, and hosted environments.项目地址: https://gitcode.com/gh_mirrors/ak/akka-core本文围绕 akka-core 仓库中artifact-bom目录及其说明文档展开讲解 Akka 项目如何利用sbt-artifact-bom插件在compile阶段自动为每个模块生成 Maven 依赖清单BOM描述符并将其纳入 PR 提交流程、交由 Wiz 等安全扫描工具消费。读完本文你将掌握这套构建期自动生成 → 随 PR 提交 → 安全工具扫描的依赖可见性治理链路并理解生成产物pom.xml的完整结构、插件接入方式与各模块覆盖范围。artifact-bom 目录是什么在 akka-core 仓库根目录下存在一个名为 artifact-bom 的目录其说明文档 artifact-bom/README.md 明确指出The Maven dependency descriptors in theartifact-bomdirectory support our security tooling.也就是说artifact-bom目录中存放的是面向 Maven 生态的依赖描述符dependency descriptors它们不是用来发布或构建 Akka 的常规构建产物而是专门服务于项目的安全工具链。这种以机器可读方式集中记录每个模块全部直接依赖及其精确版本的清单在软件供应链安全领域通常被称为 BOMBill of Materials物料清单。从仓库目录结构看artifact-bom下为每个启用了该能力的 Akka 模块各建一个子目录例如artifact-bom/akka-actor/核心 Actor 模块artifact-bom/akka-stream/流处理模块artifact-bom/akka-cluster-sharding/集群分片模块artifact-bom/akka-persistence/ 及akka-persistence-query、akka-persistence-typed、akka-persistence-tck等持久化系列artifact-bom/akka-remote/、artifact-bom/akka-cluster/、artifact-bom/akka-discovery/ 等分布式模块artifact-bom/akka-testkit/、artifact-bom/akka-slf4j/、artifact-bom/akka-pki/ 等支撑模块每个子目录内都是一个生成好的pom.xml文件即该模块对应的 Maven BOM 描述符。生成机制sbt-artifact-bom 插件artifact-bom下的文件不是手写的而是通过sbt-artifact-bom 插件在 sbt 构建过程中显式激活后自动生成的。原文档的原话是These are generated by explicit activation of the sbt-artifact-bom plugin on the sbt projects.也就是说只有显式启用了该插件的 sbt 项目才会产出对应的 BOM 描述符仓库中有三处关键配置共同构成了这一机制。1. 在 plugins.sbt 中声明插件project/plugins.sbt 中以addSbtPlugin方式引入了插件注释也明确说明其用途是create pom.xml for scanning tools为扫描工具创建 pom.xml// create pom.xml for scanning tools addSbtPlugin(io.akka.sbt % sbt-artifact-bom % 0.2.0)2. 在 build.sbt 中为各模块启用插件仓库根目录的 build.sbt 中每个需要生成 BOM 的模块定义都通过.enablePlugins(ArtifactBomPlugin)显式激活该插件。例如 actor 模块的定义lazy val actor akkaModule(akka-actor) .settings(Dependencies.actor) .settings(AutomaticModuleName.settings(akka.actor)) .settings(Compile / unmanagedSourceDirectories { val ver scalaVersion.value.take(4) (Compile / scalaSource).value.getParentFile / sscala-$ver }) .settings(VersionGenerator.settings) .enablePlugins(BoilerplatePlugin) .enablePlugins(ArtifactBomPlugin)从仓库全局搜索可以看出build.sbt中enablePlugins(ArtifactBomPlugin)出现在 actor、stream、cluster、cluster-sharding、persistence、remote、discovery、distributed-data 等二十余个模块定义上与artifact-bom目录下的模块子目录一一对应——这正是explicit activation显式激活语义的体现不启用插件的模块不会出现在 BOM 目录中。3. 在 AkkaBuild.scala 中配置 BOM 行为project/AkkaBuild.scala 首先导入了插件的自动导入项import io.akka.sbt.ArtifactBomPlugin.autoImport.makeBomIncludeDependencies随后在 项目级设置 中开启ThisBuild / makeBomIncludeDependencies : true,从设置项名称可以推断makeBomIncludeDependencies控制生成的 BOM 描述符中是否包含依赖项dependencies清单当前仓库将其在ThisBuild级别统一置为true即所有启用插件的模块生成的文件都会列出各自的实际依赖。而各模块依赖的版本定义集中在 project/Dependencies.scala 中统一维护例如scala213Version 2.13.17、reactiveStreamsVersion 1.0.4、jacksonCoreVersion 2.18.8等这些常量最终会被 sbt 解析为生成文件中的具体版本号。生成时机与 PR 工作流原文档对生成时机与提交流程给出了明确的工程约定File generation runs oncompile. It should be enough to add those generated files to the PR when changing the dependencies.这句话包含两层关键信息生成时机绑定compile任务只要执行 sbt 的compile插件就会重新生成对应的pom.xml。也就是说BOM 文件始终与当前依赖定义保持同步无需单独的额外命令或手工维护步骤。依赖变更时随 PR 提交当开发者修改了依赖例如在 project/Dependencies.scala 中升级某个库的版本本地编译后artifact-bom下相关模块的pom.xml会自动更新此时开发者只需把这些重新生成的文件一并加入同一个 PR就能保证代码变更与依赖清单变更同时被审查、同时入库。这是一条非常轻量的流程不要求开发者理解 BOM 的细节也不要求在 CI 中单独执行发布步骤只要遵循改依赖 → compile → 提交生成文件的习惯即可。从文档措辞should be enough只需这样做就够了可以看出这是项目刻意压低维护成本的设计取向。生成文件的结构深度解析为了让安全工具能够准确解析生成的pom.xml遵循标准的 Maven POM 4.0.0 格式。下面以几个实际生成的文件为例说明其结构。最小形态akka-actorartifact-bom/akka-actor/pom.xml 是结构最简单的例子project xmlnshttp://maven.apache.org/POM/4.0.0 modelVersion4.0.0/modelVersion groupIdcom.typesafe.akka/groupId artifactIdakka-actor/artifactId version100.0.0/version packagingpom/packaging dependencyManagement dependencies dependency groupIdcom.typesafe/groupId artifactIdconfig/artifactId version1.4.8/version /dependency dependency groupIdorg.scala-lang/groupId artifactIdscala-library/artifactId version2.13.17/version /dependency /dependencies /dependencyManagement dependencies dependency groupIdcom.typesafe/groupId artifactIdconfig/artifactId version1.4.8/version /dependency dependency groupIdorg.scala-lang/groupId artifactIdscala-library/artifactId version2.13.17/version /dependency /dependencies /project从中可以解读出几个关键设计packagingpom/packaging表明该文件是纯描述符不产生任何可执行或可打包的构建产物仅用于向工具暴露依赖信息。dependencyManagement以 Maven 的标准依赖版本管理语义锁定每个依赖的groupId、artifactId与精确version。顶层dependencies重复列出同样的依赖项。从仓库的生成结果看两部分内容保持一致这可以让只解析dependencies节点的扫描工具也能直接拿到完整清单。版本号完全对齐仓库依赖定义config 1.4.8、scala-library 2.13.17均可在 project/Dependencies.scala 中找到对应常量印证了生成文件与依赖定义实时同步的机制。version标签当前仓库生成文件的模块版本为100.0.0这是仓库自身的版本号可能为仓库快照期的占位版本实际内容以当前仓库文件为准。多依赖形态akka-streamartifact-bom/akka-stream/pom.xml 展示了带多个依赖的模块形态它在config、scala-library之外还锁定了流编程规范库dependency groupIdorg.reactivestreams/groupId artifactIdreactive-streams/artifactId version1.0.4/version /dependencyreactive-streams 1.0.4同样与 project/Dependencies.scala 中val reactiveStreamsVersion 1.0.4完全一致。复杂形态akka-cluster-shardingartifact-bom/akka-cluster-sharding/pom.xml 是依赖最丰富的例子之一其dependencyManagement中锁定了十余个依赖涵盖本地调用与原生接口绑定com.github.jnr:jffi、jnr-ffi、jnr-constants、jnr-a64asm、jnr-x86asm如 1.3.13、2.2.17 等版本ASN.1 编解码com.hierynomus:asn-one0.6.0配置库com.typesafe:config1.4.8高性能数据结构与内存映射库org.agrona:agrona1.22.0、org.lmdbjava:lmdbjava0.9.1字节码操作org.ow2.asm:asm系列asm、asm-analysis、asm-commons、asm-tree、asm-util均为 9.7.1响应式流规范与日志门面org.reactivestreams:reactive-streams1.0.4、org.slf4j:slf4j-api2.0.18Scala 标准库org.scala-lang:scala-library2.13.17这些依赖版本与 project/Dependencies.scala 中的agronaVersion 1.22.0、slf4jVersion 2.0.18等常量一一对应可见 BOM 生成是集中式依赖定义向机器可读描述符的自动映射。轻量形态akka-persistence-sharedartifact-bom/akka-persistence-shared/pom.xml 则只依赖scala-library一个库说明 BOM 的内容完全由模块自身的真实依赖决定不掺入任何多余条目。安全扫描对接Wiz 与软件供应链治理原文档明确了生成文件的下游消费者The generated file is then scanned by Wiz.即这些pom.xml生成后会被Wiz安全平台扫描。从文档上下文support our security tooling、scanned by Wiz以及文档中附带的 Wiz 项目状态页面可以看出这套机制的典型工作方式是每个 Akka 模块在compile时自动生成精确到版本的 Maven 依赖清单开发者修改依赖后把重新生成的 BOM 文件随 PR 提交使仓库中的清单始终反映最新依赖状态Wiz 等安全工具扫描这些 BOM 描述符将清单中的组件与已知漏洞数据库进行比对从而在依赖引入的第一时间暴露存在已知 CVE 风险的组件版本。这种做法的核心价值在于依赖可见性Akka 是一个横跨 actor、stream、cluster、persistence、remote 等数十个模块的大型多模块项目各模块的依赖规模和类型差异巨大从单个scala-library到 cluster-sharding 的十余个依赖。若依赖信息只散落在 sbt 的build.sbt、project/Dependencies.scala与各模块配置中安全工具将难以统一、稳定地解析而通过构建期自动生成的标准化 Maven POM工具获得了一份开箱即用的精确物料清单无需理解 sbt 的 DSL 语法即可完成组件分析。需要说明的是本文对 Wiz 扫描工作方式的具体细节扫描触发方式、漏洞库对接、报告展示等属于从文档与目录结构推断的合理理解仓库本身只确认了生成 → 提交 → 由 Wiz 扫描这一链路。模块覆盖范围一览从仓库实际目录看artifact-bom目前覆盖了以下模块对应 artifact-bom 下的子目录Actor 与测试akka-actor、akka-actor-typed、akka-actor-testkit-typed、akka-testkit、akka-stream-testkit流处理akka-stream、akka-stream-typed集群与分布式akka-cluster、akka-cluster-typed、akka-cluster-metrics、akka-cluster-sharding、akka-cluster-sharding-typed、akka-cluster-tools、akka-remote、akka-multi-node-testkit、akka-coordination、akka-discovery持久化akka-persistence、akka-persistence-typed、akka-persistence-query、akka-persistence-shared、akka-persistence-tck、akka-persistence-testkit、akka-distributed-data基础设施与集成akka-protobuf-v3、akka-serialization-jackson、akka-slf4j、akka-pki这些模块的生成结果与 build.sbt 中enablePlugins(ArtifactBomPlugin)的分布相互印证。若未来新增模块需要纳入安全扫描范围只需在模块定义上追加一行.enablePlugins(ArtifactBomPlugin)并在compile后提交新生成的pom.xml即可。小结一套低成本的依赖安全基线akka-core 的artifact-bom机制给出了一条清晰的工程范式用构建期自动生成 PR 随变更提交的方式为安全扫描工具持续提供精确、标准、始终新鲜的依赖清单。它不要求开发者手工维护 XML不增加 CI 的额外负担只通过 sbt 插件在compile阶段的自动输出就把依赖定义这一单一事实源同步为安全工具可消费的 Maven 描述符。对于任何希望在大型多模块项目中落地软件供应链安全扫描的团队这套插件生成 → 文件入库 → 工具扫描的组合都是值得参考的轻量级实践。若想深入验证或复现可以直接阅读仓库中的 artifact-bom/README.md、project/plugins.sbt、project/AkkaBuild.scala、build.sbt 以及 artifact-bom 目录下各模块的pom.xml文件。【免费下载链接】akka-coreA platform to build and run apps that are elastic, agile, and resilient. SDK, libraries, and hosted environments.项目地址: https://gitcode.com/gh_mirrors/ak/akka-core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

shadcn-vue 在 Laravel + Inertia + Vue 项目中的安装与组件接入指南

shadcn-vue 在 Laravel + Inertia + Vue 项目中的安装与组件接入指南

shadcn-vue 在 Laravel Inertia Vue 项目中的安装与组件接入指南 【免费下载链接】shadcn-vue Vue port of shadcn-ui 项目地址: https://gitcode.com/gh_mirrors/sh/shadcn-vue 本篇指南面向 Laravel 开发者,讲解如何在基于 Inertia Vue 的 Laravel 项目…

2026/9/24 15:05:23 阅读更多 →
VSCode+PlatformIO配置STM32 HAL开发环境全指南

VSCode+PlatformIO配置STM32 HAL开发环境全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 15:05:23 阅读更多 →
ToastFish 使用指南:用 Windows 通知栏推送背单词的完整方法

ToastFish 使用指南:用 Windows 通知栏推送背单词的完整方法

ToastFish 使用指南:用 Windows 通知栏推送背单词的完整方法 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish ToastFish 是一款运行在 Windows 通知栏(Toast&#xff09…

2026/9/24 15:05:22 阅读更多 →

最新新闻

如何优雅处理“AI bs”:从需求澄清到架构隔离的完整指南

如何优雅处理“AI bs”:从需求澄清到架构隔离的完整指南

你正在写一个无关紧要的配置模块,经理从线上开会回来,丢下一句"我们得在这个版本里把AI加上"。你问加什么AI、解决什么问题、给谁用,经理说"就是那种AI,你懂的,别人都有了,我们不能落后&quo…

2026/9/24 21:34:32 阅读更多 →
ZooKeeper投票五元组深度解析:从选举原理到故障排查

ZooKeeper投票五元组深度解析:从选举原理到故障排查

1. 从一次诡异的集群故障说起先说个真实案例。有一次我在测试环境搭了一套三节点的 ZooKeeper 集群,版本是 3.5.7,机器配置都正常,网络也通。启动之后我例行检查了一下状态,发现 leader 节点一直不稳定,隔几分钟就重新…

2026/9/24 21:34:32 阅读更多 →
交换机路由器配置实战:从Console到业务通的全链路解析

交换机路由器配置实战:从Console到业务通的全链路解析

1. 为什么“交换机、路由器配置”不是一句空话,而是网络工程师每天要拆解的活儿你有没有遇到过这样的场景:刚接手一台新到的华为S5720交换机,连上Console线,敲完system-view,手却停在了那里——接下来该输什么&#xf…

2026/9/24 21:34:32 阅读更多 →
中文命名实体识别实战:BERT+BiLSTM+CRF技术栈详解

中文命名实体识别实战:BERT+BiLSTM+CRF技术栈详解

简介:这是一份基于BERTBiLSTMCRF实现中文命名实体识别的Python课程设计源码,主要面向需要完成NLP方向课程设计、期末大作业或毕业设计的本专科学生。项目实现了从原始语料处理、字符编码、BERT向量表征、BiLSTM特征提取到CRF序列解码的完整NER流程&#…

2026/9/24 21:34:32 阅读更多 →
OpenWiki 实战:本地 Markdown 知识库与 AI Agent 集成指南

OpenWiki 实战:本地 Markdown 知识库与 AI Agent 集成指南

1. 从命令行到知识库:OpenWiki 到底解决了什么问题第一次听说 OpenWiki 是在一个做 AI Agent 开发的朋友群里,有人甩了张截图:终端里敲一行命令,本地的 Markdown 文件夹瞬间变成一套可检索、可对话的知识库,还能直接挂…

2026/9/24 21:34:32 阅读更多 →
Uni LLM Bench:自托管LLM API基准测试平台实战指南

Uni LLM Bench:自托管LLM API基准测试平台实战指南

1. 为什么要自己做一套 LLM API 基准测试平台先说个真实场景。我们团队做多租户平台,上游接了好几家大模型 API,有官方的,也有走聚合网关的。上个月某个渠道换了底层模型,线上监控没做细,等业务方反馈"回答变慢了…

2026/9/24 21:33:32 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →