0

在 mill v0.9.9 Task Context API 文档中说

Mill 保留了一个长期存在的 JVM 服务器,以避免支付周期性类加载的成本。因此,在任务中运行 System.getenv 可能不会产生最新的环境变量,因为它将在服务器启动时初始化,而不是在客户端执行时初始化。为了规避这种情况,mill 的客户端在看到环境变量时将其发送到服务器,服务器通过 Ctx API 将它们作为 Map[String, String] 提供。

所以读取最新的环境变量很简单:

def envVar = T.input { T.ctx.env.get("ENV_VAR") }

但是任务如何做到这一点:“mill 的客户端将环境变量发送到服务器”以便下一个运行的任务将看到更新的环境变量?

4

1 回答 1

1

几乎都说了。但是更清楚一点:每次运行mill命令时都会启动mill客户端,因此它也可以看到当前的操作系统环境变量。正是这个客户端在执行任务图之前捕获这些变量并将它们发送到已经运行的 Mill 服务器。

此外,要使其工作,必须使用上下文 API 通过T.ctx.env. 由于我的 Mill 提供了此上下文,因此 Mill 服务器可以访问最新的环境变量。相反,如果您使用 Javas System.getenvAPI,您可能会看到可能已经过时的变量(确切地说是那些在服务器启动时当前的变量)。

于 2021-09-01T08:41:38.500 回答