通过Maven Shade插件构建阴影jar时,保留Clojure .clj文件的时间戳

时间:2013-10-25 15:52:10

标签: java maven jar clojure maven-shade-plugin

当使用maven-shade-plugin打包包含一些Clojure库和一些Java的jar工件时。我们使用AOT编译我们的Clojure代码。当我们加载jar时,它的加载时间非常慢。 AOT编译应该对此有所帮助,但这不是我们所看到的。 我们在java jar -verbose输出中注意到,当加载Clojure类时,发生了很多 JVM__DEFINE_CLASS 调用。

这没有意义,因为我们的Clojure代码中有更多是AOT编译为.class文件。

原来maven-shade-plugin创建所有新文件,在最终工件中使用新的 timestamps Clojure使用.clj文件中的时间戳信息与.class文件,以确定是否该文件需要重新编译。 maven-shade-plugin导致.clj文件及其关联的.class文件具有相同的时间戳,因此Clojure总是选择动态重新编译源。

我们现在能够弄清楚的唯一解决方法是编写一个脚本,重新打开阴影jar并将.clj文件的时间戳恢复到过去的某个时间,这样它们就可以了不等于其关联的.class文件的时间戳。

有谁知道更好的方法?

1 个答案:

答案 0 :(得分:2)

不确定这是否更好,但您也可以选择从jar中排除clojure源。这将阻止它们被重新编译。我在使用lein进行构建并使用pack200进行压缩时遇到了这种情况。更多细节:

jar built with jwrapper doesn't work

不确定排除文件的maven选项,但是使用lein可以放入排除模式,例如#“。(clj | java)”以排除源文件。