Leiningen:只编译修改过的java源文件

时间:2013-09-12 10:41:19

标签: java clojure compilation leiningen

我正在使用leiningen:java-source-paths,它每次都在编译java源代码。有没有办法让莱恩知道它是否没有改变?

这是一个用于说明问题的示例项目:https://github.com/yayitswei/leinwithjava

1 个答案:

答案 0 :(得分:6)

看起来你将Clojure和Java源代码混合在同一个源代码树中,然后将:java-source-paths指向该源代码树根目录的子目录。多语言项目的一种更典型的方法是为每种语言的源代码管理单独的目录。

每次调用lein时都会看到重新编译Java源代码的原因是,只有在:java-source-paths指向Java包树的根目录时,才能检查过时的Java源代码。请注意,javac任务中的stale-java-sources function采用每个源文件相对于:java-source-paths目录的路径,并使用它来构建相对于:compile-path目录的相应类文件的路径。在您的情况下,当实际编译的类文件为target/classes/TestClass.class时,Leiningen期望找到target/classes/main/java/TestClass.class

我能够通过将示例项目切换到以下目录结构来修复它:

$ find src
src
src/java
src/java/main
src/java/main/java
src/java/main/java/TestClass.java
src/clj
src/clj/leinwithjava
src/clj/leinwithjava/core.clj

project.clj

:source-paths ["src/clj"]
:java-source-paths ["src/java"]