主要观点:作者受Groq在 2025 年北美 NixCon 上的演示启发,思考将 Nix 构建软件的方式重新设计得像 Bazel 一样,并尝试在 Nix 中重建构建框架。
关键信息:
- Bazel是谷歌开源的大规模以单体仓库为中心的构建系统,有许多克隆版本。
- 传统 Nix 用
mkDerivation
规则,而模仿 Bazel 的 Nix 构建定义类似。 - 定义 Java 相关的
java_library
和java_binary
函数,通过递归收集依赖来设置类路径。 - 利用
nix-build
构建和运行程序验证效果。
重要细节: - Bazel 用类似 Python 的语言定义构建目标,依赖通过
label
引用。 - Nix 中通过
stdenv.mkDerivation
编译单个最终应用,share/java
中的 JAR 会自动添加到类路径。 collectBuildInputs
函数递归收集所有编译依赖。- 在 Nix 中定义顶级
default.nix
来定义目标,通过nix-build
构建和运行程序,最终输出结果。 - 这样做的好处是构建包的 API 表面更小,代码更便于增量和并行构建,对于 Java 还需要
ijar
进行增量构建。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。