我正在使用 leiningen 的 :java-source-paths 并且它每次都在编译 java 源代码。有没有办法让 lein 判断它是否没有改变?
这里有一个示例项目来说明问题:https://github.com/yayitswei/leinwithjava
最佳答案
看起来您将 Clojure 和 Java 源代码混合在同一源代码树中,然后将 :java-source-paths
指向该源代码树根目录的子目录.多语言项目的一种更典型的方法是为每种语言的源代码管理单独的目录。
您每次调用 lein
时都会看到 Java 源代码重新编译的原因是检测陈旧 Java 源代码的检查仅在 :java-source-paths
指向时才有效在 Java 包树的根部。请注意 stale-java-sources
function在 javac 任务中获取每个源文件相对于 :java-source-paths
目录的路径,并使用它来构造相对于 :compile- 的相应类文件的路径路径
目录。在您的情况下,当实际编译的类文件是 target/classes/main/java/TestClass.class
时,Leiningen 期望找到 target/classes/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"]
关于java - Leiningen:只编译修改过的 java 源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18762021/