当使用 maven-shade-plugin 打包包含一些 Clojure 库和一些 Java 的 jar 工件时。我们对 Clojure 代码使用 AOT 编译。当我们加载 jar 时,它的加载时间非常慢。AOT 编译应该对此有很大帮助,但这不是我们所看到的。我们在 java jar -verbose 输出中注意到在加载 Clojure 类时发生了很多JVM__DEFINE_CLASS调用。
这没有任何意义,因为我们的更多 Clojure 代码被 AOT 编译为 .class 文件。
结果 maven-shade-plugin 创建了所有新文件,最终工件中带有新的时间戳Clojure 使用 .clj 文件与 .class 文件上的时间戳信息来确定文件是否需要重新编译。maven-shade-plugin 导致 .clj 文件及其关联的 .class 文件具有相同的时间戳,因此 Clojure 总是选择动态重新编译源代码。
在这一点上,我们能够弄清楚的唯一解决方法是编写一个脚本,该脚本将重新打开阴影 jar 并将 .clj 文件时间戳恢复到过去的某个时间,这样它们就不会等于它们关联的 .class 文件的时间戳。
有谁知道更好的方法?