2009-12-23 30 views
5

Tôi bắt đầu chơi với Clojure một chút và trải nghiệm Java của tôi khá hạn chế. Tôi đến từ thế giới năng động của Ruby và OO, nên bên chức năng của mọi thứ rất thú vị!Cách dễ nhất để quản lý CLASSPATH của tôi?

Dù sao, khi tôi khám phá các thư viện và các công cụ khác nhau để sử dụng (và các tệp hướng dẫn cho Sách Clojure thực dụng), mọi thứ thường gọi để đặt tệp trong CLASSPATH để Clojure xem thư viện để sử dụng.

Có những điều như thực hành CLASSPATH tốt không? Tôi có bao giờ muốn chỉ có một CLASSPATH chỉ với các thư viện bên ngoài của các tệp mà tôi cần hoặc tôi có thể tiếp tục gửi bất kỳ thư viện hoặc tệp nào mà tôi cần trong một thư mục và chỉ định nó là CLASSPATH của tôi và chỉ yêu cầu những gì cần thiết?

Nếu điều đó giúp ích, tôi là người dùng OSX và Emacs (Sử dụng chất nhờn và áo choàng).

Trả lời

2

Cá nhân, tôi đang sử dụng một biến thể của hàmelisp của Phil Hagelberg, xem nguồn trong this post cho nhóm Clojure. Nó thiết lập classpath một cách thích hợp cho dự án bạn sẽ làm việc, sau đó khởi chạy SLIME. (EDIT: Bạn sẽ cần phải thay đổi giá trị đó được giao cho swank-clojure-jar-path để trỏ đến clojure.jar Tôi đang sử dụng (expand-file-name "~/.clojure/clojure.jar") làm mặc định..)

Để trả lời câu hỏi về việc có tất cả mọi thứ trên classpath mọi lúc và chỉ ném vào những gì cần thiết: theo hiểu biết tốt nhất của tôi, không có gì thực sự phá vỡ nếu bạn thực hiện phương pháp đầu tiên (tôi biết tôi làm điều đó cho mục đích thử nghiệm), nhưng dường như mọi thứ có thể phá vỡ theo cách tiếp cận đầu tiên (xem bình luận của cjstehno dưới đây) và trong một dự án thích hợp, tôi tìm thấy thứ hai để được sạch hơn. Tại một số điểm, nó sẽ là cần thiết để xác định những gì libs đang được sử dụng (và phiên bản nào của chúng), nếu chỉ để nói với leiningen (hoặc maven) về nó - tại sao không giữ các tab trên nó khi bạn đi.

+0

Thực ra, nếu bạn đặt tất cả mọi thứ trên classpath, bạn có thể gặp phải các vấn đề, đặc biệt là sự va chạm của classloader hoặc tải lớp sai. Nó thường là tốt nhất để chỉ có những gì bạn cần trên classpath cho ứng dụng cụ thể của bạn. – cjstehno

+0

Ồ, tôi hiểu rồi. Dường như tôi may mắn cho đến nay, nhưng tôi sẽ ghi nhớ điều đó trong tương lai. Cảm ơn nhận xét, sẽ chỉnh sửa cho phù hợp. –

+0

Ohhh Tôi thích việc thực hiện dự án clojure của Phil, tôi nghĩ tôi sẽ chạy và báo cáo lại một chút. Cảm ơn! – mwilliams

1

Chúng tôi đang sử dụng Clojure và sử dụng một số công cụ cơ sở hạ tầng, đặc biệt là Eclipse (IDE) (http://en.wikipedia.org/wiki/Eclipse_%28software%29) và maven (http://en.wikipedia.org/wiki/Apache_Maven). maven quản lý các thư viện và phụ thuộc jar vì vậy nếu bạn có một số trong số này và chúng có khả năng phát triển bắt đầu bằng cách sử dụng maven.

Trong câu trả lời cho câu hỏi ban đầu của bạn, bạn chỉ có thể đặt lọ của bạn trong một thư mục và bạn có thể truy cập chúng theo tên mỗi khi bạn chạy. Nhưng bạn sẽ được hưởng lợi từ các công cụ ...

Nếu bạn chỉ khám phá thì Eclipse có thể sẽ quản lý các tệp jar của bạn khá dễ dàng. Bạn có thể thêm chúng vào dự án theo yêu cầu thông qua tùy chọn Build Path -> Configure Build Path.

Khi công việc của bạn tiến triển, bạn có thể muốn chia thành các dự án mà Eclipse hỗ trợ để bạn có thể thêm (hoặc các dự án khác) vào Đường dẫn xây dựng của mình.

Nếu bạn sử dụng thư viện Clojure bên ngoài, hãy xem liệu chúng đã được đóng gói như dự án maven chưa (chúng sẽ có tệp pom.xml). POM sẽ đưa ra một danh sách các phụ thuộc. #

+0

Eclipse thật không may. Như tôi đã đề cập, Emacs là những gì tôi đang sử dụng cho Clojure dev. – mwilliams

1

Thực hành CLASSPATH thông thường cho Java là chỉ đặt các tệp jar cần thiết cho dự án vào đường dẫn lớp dự án này, có nghĩa là có các đường dẫn lớp khác nhau cho các dự án khác nhau. Điều này thường được quản lý bởi IDE như là một phần của thuộc tính dự án của nó.

Vì bạn đang sử dụng Emacs và do đó có thể không có hoặc sử dụng một cái gì đó như dự án nó có thể thuận lợi hơn cho bạn để thiết lập và sử dụng một đường dẫn lớp toàn cầu cho tất cả các công cụ liên quan đến clojure của bạn hoặc thậm chí có thể đặt tất cả các tệp jar cần thiết vào thư mục java2se/jre/lib/ext của bản cài đặt java của bạn.

Hai vấn đề chính có thể phát sinh do có tệp jar chưa được đóng trong đường dẫn lớp của bạn là: 1. nó có tác động tiêu cực nhỏ vào thời gian khởi động của JVM và 2. nó trở nên khó khăn hơn để đảm bảo rằng bạn không có các lớp với các phiên bản khác nhau trong cùng một đường dẫn lớp (tức là các lớp khác nhau có cùng một gói và tên trong các tệp jar khác nhau).

1

Vì Java SE 1.6 (hoặc JDK 1.6), bạn có thể bao gồm các mục nhập đường dẫn lớp theo ký tự đại diện. Nếu tập tin lớp học của bạn sống trong bin \, và thư viện file jar của bạn sống trong \ lib, sau đó trên Windows, bạn có thể xác định con đường lớp học của bạn như thế này:..

set CLASSPATH=bin;lib\*; 

này sẽ cho phép bạn thêm các tập tin jar vào. \ lib thư mục và chúng sẽ tự động được thêm vào đường dẫn lớp cho các trường hợp mới của JRE.

Xem liên kết này để biết chi tiết: Setting the class path

Trước JDK 1.6 bạn phải thêm mỗi file jar vào classpath riêng.

6

Tôi khuyên bạn nên sử dụng leiningen và lein-swank để quản lý việc này. Bạn có thể bắt đầu một REPL trong thư mục và kết nối với nó từ Emacs.

0

Tôi chỉ phát hiện bit này mà tôi cần phải cung cấp một shot:

(setq swank-clojure-extra-classpaths (list "/class/path/1" "/class/path/2" "/class/path/3" "etc"))

0

clojure-contrib/phóng/bash/CLJ-env-dir có một đặc tính thú vị mà bạn có thể trỏ nó ở một và về cơ bản nó sẽ bao gồm bất cứ thứ gì trong đó. Trong quá khứ tôi đã có một thư mục ~/classpath mà tôi sẽ đổ bất kỳ lọ vào và liên kết bất kỳ thư mục thường được sử dụng và nó làm việc tuyệt vời. Cách rất đơn giản để đổ và sử dụng. Bây giờ tôi có xu hướng sử dụng Maven clojure-maven-plugin và hoạt động tốt mặc dù có thể hơi tẻ nhạt khi bạn chỉ muốn muck xung quanh với một số ý tưởng.

Các vấn đề liên quan