5

我只是在学习如何lein,我想从 Java 源deftype中使用 Clojure 源中创建的类。这在基本教程中没有涉及,我无法让它正常工作。

问题是 Java 源代码无法导入 Clojure 类,因为它还没有被编译。而且 Clojure 类没有被编译,因为 Java 源代码中止了编译。

我举一个最小的例子:

  1. 创建一个新项目:

    lein new app javafoo
    
  2. 添加project.clj

    :aot :all
    :java-source-paths ["src/java"]
    
  3. 放入src/javafoo/core.clj

    (ns javafoo.core)
    (deftype PPoint [x y])
    
  4. 放入src/java/JavaFoo.java

    package foo.java;
    import javafoo.core.PPoint;
    
    public class JavaFoo {
        public static void main(String[] args) {
            System.out.println("JavaFoo");
        }
    }
    
  5. 尝试编译

    lein compile
    

它失败了package javafoo.core doesn't exist。所以现在我必须

  1. 注释掉:java-source-paths
  2. 编译
  3. 取消注释:java-source-paths
  4. 编译

它终于奏效了。有没有办法让它从一开始就起作用?

4

1 回答 1

7

将此行添加到您的project.clj

:prep-tasks [["compile" "javafoo.core"] "javac"]
于 2013-10-03T14:07:38.897 回答