2010-09-03 39 views
6

Ben çevreyi değişken CLASSPATH'E kontrol
daniel @ daniel-dizüstü: ~/ps/Clojure// halka-öğretici $ echo $ CLASSPATH'E
/home/daniel/ps/Clojure/projeler/halka öğretici projeleri/sRCOrtam değişkeni CLASSPATH <> Clojure's CLASSPATH. Niye ya? İşte

İşte o olduğunu düşündüğü java kontrol edin.
daniel @ daniel-dizüstü: ~/ps/Clojure/projeler/halka öğretici $ Lein repl
Clojure 1.1.0 kullanıcı => (Sistem/getProperty "java.class.path")
"src/: sınıfları /:/home/daniel/.m2/depo/Leiningen/Leiningen/1.1.0/Leiningen-1.1.0-standalone.jar: lib/Clojure-1.1.0.jar: lib/servlet-api-2.5- 6.1.14.jar: lib/commons-io-1.4.jar:/lib CLJ-StackTrace-0.1.0.jar: lib/Clojure-contrib-1.1.0.jar:/lib halka devel-0.2.0. haznesi: lib/dalgakıran-util-6.1.14.jar: lib/CLJ-html 0.1.0.jar: lib/halka-dalgakıran-bağdaştırıcı 0.2.0.jar: lib/dalgakıran-6.1.14.jar: lib/halka-çekirdek-0.2.0.jar: lib/commons-fileupload-1.2.1.jar: lib/halka-sunucu uygulaması-0.2.0.jar: lib/commons-codec 1.4.jar:"

Gördüğünüz gibi, iki cevap tamamen farklı. Eminim ki, java'nın CLASSPATH değişkenini "al" ı değiştirmem gereken yerde yanlış anlaşılmalıyım. Öyleyse anlaşma nedir? Leiningen, clojure'ın kendi garip renegade örneğini doğuruyor mu? Tamamen alakasız bir değişken mi değiştiriyorum? Herhangi bir yardım çok takdir edilir.

+0

10 ipucu: gidin, dizini açmak için söylediğin lein komut dosyasına bakın. CLASSPATH ile bazı şeyler yaptığını göreceksiniz – Belun

cevap

9

$CLASSPATH burada gerçekten tamamen alakasız. Komut satırında hiçbir sınıf yolu bilgisi sağlanmamışsa, java -the-JVM-başlatıcısı programının kullanacağı şey budur; Leiningen, JVM'yi, üzerinde çalıştığınız projeye uygun bir sınıf yolu ile sağlar.

Bu özel durumda, "/home/.../ring-tutorial/src", yalnızca Halkalı öğreticinin kaynağını içerdiğinden ve Clojure kavanozu (Clojure kodunu çalıştırmak için gerekli olan) içermediği için Halka öğreticisi için çok kullanışlı bir sınıf yolu olmaz. (Halka çok modüllü bir projedir) veya diğer kavanozların herhangi biri Yüzük bağlıdır. Leiningen tarafından üretilen sınıf yolu oldukça uzun görünebilir, ancak tüm bileşenlerinin gerçekten orada olması gerekir.

Tesadüfen, eğer Clojure ile çalışmaya yeni başlıyorsanız, mümkünse araç takımınızın sınıf yolu yönetim tesislerine (bu, Emacs + lein swank veya bazı IDE + Clojure eklentileri) sahip olmanızı tavsiye ederim. Aksi takdirde, burada Clojure sınıf yolu ile ilgili birçok soru var, artı google için yapabileceğiniz konuyla ilgili diğer birçok kaynak var ... ama şimdi bu araç desteği oldukça sağlam ve normalde 'a dokunmanız gerekmez elle sınıf atma, başlangıçta en çok kaçınılan acıdır.

2

bağımlılıkları yönetmek için CLASSPATH'E değişkeni kullanarak sorun tüm Java ve diğer JVM dilleri kendi amaçları için manipüle gerekir olmasıdır. Kendini köşeye boyamadan çok uzun sürmez.

Yalnızca bir sunucuyu başlatan bir sunucuyu başlattığınızda çalışır. Tamamen farklı bağımlılıklara ihtiyaç duyan 10 program ve projeye sahip olan bir Java geliştiricisinin bir PC'sinde tamamen bozulur ve daha sonra kaynak kodunun yazılmasında CLASSPATH değişkenini değiştirmek için daha fazla hata ayıklama bash betikleri harcar.

Dolayısıyla sınıf yolunu yönetmek için bu yolu sadece çok yerel olarak kullanarak diğer classloading tekniklerini prefering veya CLASSPATH kullanırken, tedavülden aldı.

1

Clojure sınıf yolu, Java sınıf yoludur. java yürütülebilir Leiningen do (ve diğer birçok Clojure betiklerini) hangi -cp argümanla çağrıldığında

$CLASSPATH göz ardı edilir.

Leiningen gibi bir oluşturma aracı kullanıyorsanız, sınıf yolunu yönetmek için onu kullanmalısınız.

İlgili konular