2013-10-03 12 views
5

Po prostu uczę się jak lein i chciałbym użyć ze źródła Java klasy utworzonej przez deftype w źródle Clojure. Nie zostało to omówione w podstawowym samouczku i nie mogę go uruchomić poprawnie.Kolejność kompilacji Leiningen?

Problem polega na tym, że źródło Javy nie może importować klasy Clojure, ponieważ nie została jeszcze skompilowana . Klasa Clojure nie jest skompilowana, ponieważ kompilacja została przerwana przez źródło Javy .

daję minimalny przykład:

  1. utworzyć nowy projekt z:

    lein new app javafoo 
    
  2. Dodaj do project.clj

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

    (ns javafoo.core) 
    (deftype PPoint [x y]) 
    
  4. Wstawić do 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. spróbować skompilować

    lein compile 
    

nie jest on z package javafoo.core doesn't exist. Więc teraz muszę

  1. Wykomentuj :java-source-paths
  2. kompilacji
  3. Odkomentuj :java-source-paths
  4. kompilacji

To w końcu działa. Czy jest jakiś sposób, żeby to działało od samego początku?

Odpowiedz

8

Dodaj tę linię do project.clj:

:prep-tasks [["compile" "javafoo.core"] "javac"] 
Powiązane problemy