2011-07-08 16 views
5

Czy ktoś pomyślnie utworzył projekt NetBeans, który łączy źródła Clojure i Java?Źródło Clojure i Java w tym samym projekcie NetBeans

Mam projekty, w których program sterownika (startup, gui, user prefs itp.) Jest w Javie, ale logika jest w Clojure. W tej chwili kompiluję kod Clojure do słoika w jednym projekcie i importuję go jako bibliotekę w osobnym projekcie Java. Byłoby wygodnie, gdyby całe źródło można było połączyć w jednym projekcie NetBeans.

Czy ktoś wymyślił metodę, aby to zrobić?

+0

ja nie zrobiłem tego w Netbeans ale to działa w Eclipse tak samo podejście może działać: ustawić wszystko jako projekt Java, mają słoiki Clojure w ścieżce klasy i dołącz pliki .clj do kompilacji, aby były dostępne w ścieżce klas w środowisku wykonawczym. – mikera

Odpowiedz

2

Jednym z możliwych rozwiązań jest modyfikacja skryptu Ant projektu Java NetBeans (build.xml w katalogu głównym), aby go uzyskać.

Domyślnie NetBeans tworzy kilka obiektów zastępczych Ant w katalogu build.xml katalogu głównego projektu, zastępując je w celu zautomatyzowania zadań wykraczających poza standardowy proces kompilacji (np. Kompilowanie innych języków w celu użycia ich bibliotek w bieżącym projekcie). Przez przesłonięcie jednego z elementów zastępczych w tym skrypcie kompilacji, takim jak "-pre-compile", możesz napisać prosty cel, aby wywołać proces kompilacji Clojure, używając zadania "exec" Ant i umieścić wszystkie powstałe pliki klas (lub JAR) w odpowiedni katalog kompilacji.

Jeśli robisz to często, możesz zdefiniować rozszerzenie Ant (za pomocą wtyczki makra lub Anta), więc nie musisz modyfikować pliku build.xml za każdym razem.

+0

Co za świetny pomysł !. Używałem celów zastępczych dla innych celów w przeszłości, ale nigdy nie przyszło mi to do głowy. – clartaq

+0

Cieszę się, że działało dobrze dla Ciebie! Wpadłem na ten pomysł, ponieważ POTRZEBUJESZ używać Ant jako języka skryptowego do budowania dla zastrzeżonego języka, który zaprojektowała moja firma (chyba że chcemy ręcznie skompilować każdy plik źródłowy). Pisząc nasze narzędzia do budowania w Ant, pozwól nam zintegrować ten skądinąd kruchy, pośredni język z wszystkimi projektami Java Eclipse/NetBeans. – depthfirstdesigner

1

Używam metody RT. Kładę kodu Clojure do pliku skryptowego, że włączenie i procesu przy starcie:

try { 
      RT.loadResourceScript("com/mydomain/app/clojure_scripts.clj"); // Initialize Clojure script processor with our script 
     } catch (Exception e) { 
      Util.logException(e, "Unable to run Clojure initialization script."); 
     } 

Następnie, ponieważ moim głównym logika jest w Javie i mam tylko wołając do Clojure do obliczeń, używam kodu kleju mapowanie połączeń dla mnie:

/* 
* Class to wrap Clojure scripts with Java friendly methods. 
*/ 
public class Clojure { 
    private static final String ns="com.mydomain.app"; 

    public static double calculate(final double size, final double otherVar) { 
     Var report=RT.var(ns, "calculate"); 
     return (Double) report.invoke(size, otherVar); 
    } 
}; 
Powiązane problemy