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

标签 java clojure compilation leiningen

我正在使用 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/

相关文章:

java - 为具有泛型类型的 Java POJO 生成 Avro 架构

java - 使用 String.format java 以正确的方式对齐所有字符串

java - ArrayList 与数组。为什么一个工作,一个不工作?

clojure - 具体化,ToString

error-handling - 如何在 ClojureScript 错误消息中找到我自己的函数?

java - 方法调用的jvm缓存?

functional-programming - Clojure 中延迟卷积 fn 的问题

c++ - 在 64 位 Ubuntu 上编译 x32 位 LD_PRELOAD

java - IntelliJ IDEA 13 使用 Java 1.5,尽管设置为 1.7

compilation - 编译 lua 脚本 (*.exe) 的最简单方法...?