消除那个看起来像 Bazel 的东西

主要观点:作者受Groq在 2025 年北美 NixCon 上的演示启发,思考将 Nix 构建软件的方式重新设计得像 Bazel 一样,并尝试在 Nix 中重建构建框架。
关键信息

  • Bazel是谷歌开源的大规模以单体仓库为中心的构建系统,有许多克隆版本。
  • 传统 Nix 用mkDerivation规则,而模仿 Bazel 的 Nix 构建定义类似。
  • 定义 Java 相关的java_libraryjava_binary函数,通过递归收集依赖来设置类路径。
  • 利用nix-build构建和运行程序验证效果。
    重要细节
  • Bazel 用类似 Python 的语言定义构建目标,依赖通过label引用。
  • Nix 中通过stdenv.mkDerivation编译单个最终应用,share/java中的 JAR 会自动添加到类路径。
  • collectBuildInputs函数递归收集所有编译依赖。
  • 在 Nix 中定义顶级default.nix来定义目标,通过nix-build构建和运行程序,最终输出结果。
  • 这样做的好处是构建包的 API 表面更小,代码更便于增量和并行构建,对于 Java 还需要ijar进行增量构建。
阅读 8
0 条评论