2011-07-08 15 views
5

Herkes, Clojure ve Java kaynağını birleştiren bir NetBeans projesini başarıyla oluşturdu mu?Aynı NetBeans projesinde Clojure ve Java kaynağı

Sürücü programının (başlatma, gui, kullanıcı prefs, vb.) Java'da bulunduğu, ancak mantığın Clojure'da olduğu projelerim var. Şu anda Clojure kodunu bir projedeki bir kavanoza derleyip ayrı bir Java projesinde kütüphane olarak alıyorum. Tüm kaynağın tek bir NetBeans projesinde birleştirilebilmesi uygun olacaktır.

Bunu yapmak için bir yöntem geliştiren var mı?

+0

nedenle aynı yaklaşım işe yarayabilir ben Netbeans bu yapılmazsa ettik ama Eclipse çalışan var: set herşeyi bir Java projesi olarak, sahip sınıf yolunda Clojure kavanoz ve .clj dosyalarınızı yapıya dahil ederek çalışma zamanında sınıf yolunda kullanılabilir. – mikera

cevap

2

Olası bir çözüm, NetBeans Java projenizin Ant betiğini (kök dizininizde build.xml) değiştirmesini sağlamaktır.

Varsayılan olarak, NetBeans, standart oluşturma işleminin ötesindeki görevleri otomatikleştirmek için (örneğin, geçerli projenizdeki kitaplıklarını kullanmak için diğer dilleri derlemek gibi) geçersiz kılmak için kök proje yöneticisinin build.xml dosyasında birkaç yer tutucu Ant hedefi oluşturur. "-pre-compile" gibi bu derleme betiğindeki yer tutucu hedeflerinden birini geçersiz kılarak, "exec" görevini kullanarak Clojure derleme işlemini çağırmak için basit bir hedef yazabilir ve sonuçta oluşan tüm sınıf dosyalarını (veya JAR) uygun derleme dizini.

Bunu sık sık yaparsanız, bir Ant uzantısı (bir makro veya Ant eklentisi aracılığıyla) tanımlayabilirsiniz, böylece her defasında build.xml dosyasını değiştirmeniz gerekmez.

+0

Ne harika bir fikir! Geçmişte başka amaçlarla yer tutucu hedeflerini kullandım, ama bu hiç bana olmadı. – clartaq

+0

Sizin için iyi çalıştı sevindim! Aslında fikre kapıldım çünkü şirketimi tasarladığım özel bir dil için Ant'i bir betik betiği olarak kullanmamalıyız (her kaynak dosyayı el ile derlemek/bağlamak istemedikçe). Yapım araçlarımızı Ant'e yazmak, bu kırılgan, orta dereceli dili bütün Eclipse/NetBeans Java projeleriyle entegre edelim. – depthfirstdesigner

1

RT yöntemini kullanıyorum. benim ana mantık Java ve ben sadece hesaplamalar için Clojure için dışarı çağırıyorum beri, bazı tutkal kodu kullanın

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."); 
     } 

Ardından: Ben başlangıçta bir komut ben dahil dosya ve sürecine benim Clojure kod koymak Benim için çağrıları eşleştirmek için:

/* 
* 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); 
    } 
};