莱宁根编译顺序?

abo*_*abo 5 clojure leiningen

我只是学习如何lein,并且我想从Java源代码中使用deftype在Clojure源代码中创建的类.这在基础教程中没有涉及,我无法使其正常工作.

问题是Java源代码无法导入Clojure类,因为它尚未编译.并且Clojure类未编译,因为Java源会中止编译.

我给出一个最小的例子:

  1. 创建一个新项目:

    lein new app javafoo
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加 project.clj

    :aot :all
    :java-source-paths ["src/java"]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 投入src/javafoo/core.clj:

    (ns javafoo.core)
    (deftype PPoint [x y])
    
    Run Code Online (Sandbox Code Playgroud)
  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");
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 尝试编译

    lein compile
    
    Run Code Online (Sandbox Code Playgroud)

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

  1. 评论出来 :java-source-paths
  2. 取消注释 :java-source-paths

它终于奏效了.有没有办法让它从一开始就有效?

Rör*_*örd 7

将此行添加到您的project.clj:

:prep-tasks [["compile" "javafoo.core"] "javac"]
Run Code Online (Sandbox Code Playgroud)