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

yay*_*wei 2 java compilation clojure leiningen

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

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

Ale*_*lex 6

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

您每次调用时都会看到重新编译Java源代码的原因是lein检测过时Java源的检查只有:java-source-paths在Java包树的根目录处才有效.请注意,javac任务中的stale-java-sources函数采用每个源文件相对于:java-source-paths目录的路径,并使用它来构造相对于:compile-path目录的相应类文件的路径.在你的情况下,Leiningen期望找到target/classes/TestClass.class实际编译的类文件的时间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
Run Code Online (Sandbox Code Playgroud)

并在project.clj:

:source-paths ["src/clj"]
:java-source-paths ["src/java"]
Run Code Online (Sandbox Code Playgroud)