2013-10-03 65 views
5

我剛剛學習如何lein,我想從Java源 使用由Clojure源中deftype創建的類。這不包括在基本的 教程中,我無法讓它正常工作。Leiningen彙編命令?

問題是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. 編譯

最後,它的工作原理。有沒有辦法讓它從一開始就工作?

回答

8

此行添加到您的project.clj

:prep-tasks [["compile" "javafoo.core"] "javac"]