Mill构建工具:React式构建的革命

2025-05-13

Mill 是一款独特的构建工具,它借鉴了 React.js 的核心设计理念:直接风格构建和使用单一通用语言。与传统的基于回调函数和多语言配置的构建工具不同,Mill 允许开发者编写直接返回最终构建结果的函数,并由 Mill 自动处理缓存、并行化和优化等复杂工作。这种方法简化了构建流程,提高了可读性和可维护性,并提升了 IDE 集成体验。

阅读更多
开发

Mill构建系统为何选择Scala?

2025-02-13

Mill构建系统选择Scala作为配置语言,而非YAML、XML等,引发了许多疑问。文章从三个方面解释了这一选择:使用通用编程语言的原因,选择Scala的原因以及选择Java虚拟机的原因。Scala虽然是小众语言,但其独特的特性使其特别适合用于配置大小项目的构建系统。

阅读更多
开发

Mill 使用 Github Actions 构建跨平台原生二进制文件

2025-02-02

Mill 项目利用 Github Actions 在不同平台(Mac、Windows、Linux)构建原生二进制文件,并将其上传到 Maven Central。通过巧妙的配置,它实现了 JVM 兼容的通用构件和特定平台的原生二进制构件的分离发布,保证了跨平台兼容性,并通过自定义 `artifactName` 和 `jar` 任务,生成带有操作系统和 CPU 架构后缀的特定版本文件,方便用户根据自身环境选择合适的执行文件。

阅读更多

Mill JVM构建工具:直接可执行的Assembly JARs

2025-01-02

Mill JVM构建工具生成的assembly JARs可以直接执行,无需`java -jar`命令。这得益于Mill在JAR文件头部添加了一个shell脚本,该脚本负责调用Java运行时环境。此脚本兼容Unix和Windows系统,实现了跨平台的可执行性。文章详细解释了其原理,即利用ZIP文件的特性,将脚本与JAR文件内容拼接,从而实现一键运行。这使得Java程序更易于融入命令行工作流。

阅读更多
开发 Mill

Mill构建工具:如何通过选择性测试加速CI

2024-12-30

在大型代码库中,每次运行所有测试效率低下。文章探讨了三种选择性测试方法:基于文件夹、基于依赖和基于启发式。基于文件夹的方法简单但可能遗漏错误;基于依赖的方法更全面,但可能过度测试;基于启发式的方法通过自定义规则优化测试选择,但需要权衡测试彻底性和速度。Mill构建工具原生支持基于依赖的选择性测试,显著提升CI效率,但仍需结合启发式方法进一步优化,以平衡速度和测试覆盖率。

阅读更多

大型代码库的构建利器:单仓构建工具

2024-12-20

面对大型代码库(100-10000名活跃开发者),传统构建工具力不从心。单仓构建工具如Bazel和Mill应运而生,它们支持多语言、自定义构建任务、自动缓存和并行化,并提供远程缓存和执行功能,显著提升构建速度和效率。此外,它们还支持基于依赖的测试选择和构建任务沙箱,减少测试时间和不确定性。对于小型项目,这些功能或许显得多余,但对于大型项目而言,它们却是高效协作和持续集成的关键。

阅读更多

Java 编译速度有多快?——Mill JVM 构建工具

2024-11-26

本文探讨了 Java 编译速度及构建工具的性能开销。通过对 Mockito 和 Netty 项目的基准测试,发现现代 Java 编译器每秒可编译超过 10 万行代码,即使百万行项目也能在 10 秒内完成单线程编译。然而,构建工具(如 Maven、Gradle 和 Mill)会增加显著的开销。Mill 的性能最佳,但也比直接使用 Java 编译器慢了 4 倍。虽然构建工具执行依赖管理、并行处理等额外任务,但当依赖项已缓存且仅需编译代码时,任何非编译操作都是开销。作者认为,构建工具的开销过高,Java 构建体验仍有很大提升空间。

阅读更多
未分类 编译速度