如何避免传递AOT编译clojure源文件

时间:2016-01-11 08:46:57

标签: clojure

我有一个跨Java-clojure项目,它使用maven作为构建工具。需要AOT编译一些命名空间。

问题是,编译需要永远完成。检查maven过程给出了以下观察结果:

  1. 编译时,CPU等待时间非常长(单核70-90%)。
  2. 采样高等待线程给出最里面调用的堆栈:

    at java.io.FileDescriptor.sync(Native Method)
    at clojure.lang.Compiler.writeClassFile(Compiler.java:7269)
    
  3. 检查target/classes/文件夹,会生成大量.class个文件,主要用于我的项目所依赖的基于clojure的库。
  4. 我尝试过:

    1. 指示clojure-maven-plugin仅编译给定的命名空间。但是沿着依赖线的传播不会受到抑制。
    2. 明确包含给定的命名空间,并排除依赖关系的命名空间。依赖库仍由AOT进程重新编译
    3. 好吧,就在我按下“POST”按钮之前,我找到了issue。似乎早在5年后我们就已经进行了这样的讨论,问题并不是针对clojure-maven-plugin的。那么这个问题又有什么新意?在我的机器上花费大约4分钟mvn clean compile用于我不那么庞大的项目,我可以喝咖啡,坐下来放松一下......

      如果在不久的将来不以任何方式解决问题,可以建议减轻我的痛苦吗?欢迎任何想法。

1 个答案:

答案 0 :(得分:0)

事实证明,这个问题可能还没有很好的解决方案。然而,我现在采用这种方式:

我现在使用自己的clean.sh脚本来清除我自己的命名空间中的类文件,而不是运行 clean 目标。通过这样做,我的4分钟编译时间下降到1分多钟。

我将问题保持开放,或许有一天我们会看到更好的解决方案。