2

我正在使用 leiningen 的 :java-source-paths 并且它每次都在编译 java 源代码。有没有办法让 lein 判断它是否没有改变?

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

4

1 回答 1

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

并在project.clj

:source-paths ["src/clj"]
:java-source-paths ["src/java"]
于 2013-10-01T14:52:27.373 回答