2009-12-23 2 views
5

저는 Clojure로 조금 놀기 시작했습니다. Java 경험은 제한되어 있습니다. 나는 Ruby와 OO의 역동적 인 세계에서 왔으므로 기능적 측면이 매우 흥미 롭습니다!내 CLASSPATH를 관리하는 가장 쉬운 방법은 무엇입니까?

어쨌든 라이브러리와 다양한 도구 (Pragmatic Clojure Book의 튜토리얼 파일)를 발견 할 때마다 Clojure가 라이브러리를 사용하기 위해 일반적으로 모든 것이 CLASSPATH에 파일을 배치해야합니다.

좋은 CLASSPATH 연습 같은 것이 있습니까? 필자가 필요로하는 파일의 외부 라이브러리 만 가지고 CLASSPATH를 갖기를 원할 것인가 아니면 디렉토리에서 필요로하는 라이브러리 나 파일을 던져서 간단히 CLASSPATH로 정의하고 필요한 것을 필요로 할 수 있습니까?

도움이된다면, 저는 OSX와 Emacs 사용자입니다 (점액과 swank-clojure 사용).

답변

2

개인적으로 Phil Hagelberg가 clojure-project elisp 함수의 변형을 사용하고 있습니다. Clojure 그룹 this post의 출처를 참조하십시오. 작업 할 프로젝트에 맞게 클래스 경로를 적절하게 설정 한 다음 SLIME을 시작합니다. (편집 : 당신은 clojure.jar를 가리 키도록 swank-clojure-jar-path에 할당됩니다 값을 변경해야합니다 나는 기본적으로 (expand-file-name "~/.clojure/clojure.jar")을 사용하고 있습니다..)

이 클래스 경로에있는 모든 시간을 모든 것에 대한 질문에 대답하기 위해 단지 필요한 것을 던지는 것 : 내 지식으로는 첫 번째 접근 방식을 취하면 아무 것도 실제로 깨지지 않을 것입니다. 그러나 첫 번째 접근 방식으로 문제가 발생할 수 있습니다 (cjstehno의 설명 참조). 아래) 적절한 프로젝트에서 나는 두 번째가 더 깨끗하다는 것을 발견한다. 어느 시점에서 LIINEN (또는 Maven)에게 말해야 만한다면 libs가 사용되고 있는지 (그리고 어떤 버전인지) 결정할 필요가 있습니다.

+0

실제로 클래스 패스에 모든 것을 넣으면 문제, 특히 클래스 로더 충돌 또는 잘못된 클래스 로딩 문제가 발생할 수 있습니다. 일반적으로 특정 애플리케이션의 클래스 경로에 필요한 것만 있으면 좋습니다. – cjstehno

+0

아, 알겠습니다. 명백하게 나는 지금까지 운이 좋았다. 그러나 나는 장래의 것을 명심할 것이다. 의견을 주셔서 감사합니다, 그에 따라 수정합니다. –

+0

오 필자는 필의 클로저 프로젝트 구현을 좋아한다. 감사! – mwilliams

1

우리는 Clojure를 사용하며 Eclipse (IDE) (http://en.wikipedia.org/wiki/Eclipse_%28software%29) 및 maven (http://en.wikipedia.org/wiki/Apache_Maven)과 같은 많은 인프라 도구를 사용합니다. maven은 라이브러리와 항아리 종속성을 관리합니다. 따라서 이들 중 많은 수가 있으면 maven을 사용하여 커질 수 있습니다.

원래 질문에 대한 대답으로 항아리를 하나의 디렉토리에 넣고 실행할 때마다 이름으로 액세스 할 수 있습니다. 그러나 당신은 도구들로부터 이익을 얻을 것입니다. ...

만약 당신이 탐험을하고 있다면, 이클립스는 당신의 jar 파일을 상당히 고통없이 관리 할 것입니다. 빌드 경로 -> 빌드 경로 구성 옵션을 통해 필요에 따라 프로젝트에 추가 할 수 있습니다.

작업이 진행되면 Eclipse를 지원하는 프로젝트로 분할하여 빌드 경로에 자신의 프로젝트 (또는 다른 프로젝트)를 추가 할 수 있습니다.

외부 Clojure 라이브러리를 사용하는 경우 해당 파일이 maven 프로젝트로 패키징되어 있는지 (pom.xml 파일이 있는지) 확인하십시오. POM은 종속성 목록을 제공합니다. #

+0

Eclipse는 불행히도 문제가되지 않습니다. 앞서 언급 한 것처럼 Emacs는 Clojure 개발자를 위해 사용하고 있습니다. – mwilliams

1

Java의 일반적인 CLASSPATH 방법은 프로젝트에 필요한 jar 파일 만이 프로젝트 클래스 경로에 넣는 것입니다.이 방법은 다른 프로젝트의 클래스 경로가 다를 수 있음을 의미합니다. 이것은 일반적으로 프로젝트 속성의 일부로 IDE에서 관리합니다.

Emacs를 사용하고 있으므로 프로젝트와 같은 것을 사용하지 않았거나 사용하지 않았기 때문에 모든 클로저 관련 항목에 대해 단일 글로벌 클래스 경로를 설정하거나 단순히 모든 것을 넣는 것이 더 편리 할 수 ​​있습니다. 필요한 jar 파일을 Java 설치의 java2se/jre/lib/ext 디렉토리에 복사하십시오.

클래스 경로에 부적절한 jar 파일이있는 것으로 인해 발생할 수있는 두 가지 주요 문제점은 다음과 같습니다. 1. JVM의 시작 시간에 약간의 부정적인 영향을 미치고 2. 같은 클래스 패스 (즉, 다른 jar 파일 내의 같은 패키지 및 이름을 가지는 다른 클래스)로 다른 버젼의 클래스를 가지지 않습니다.

1

Java SE 1.6 (또는 JDK 1.6)부터는 클래스 경로 항목을 와일드 카드로 포함 할 수 있습니다. . 클래스 파일은 \ bin에 살고, 라이브러리 jar 파일에 살고 \ lib에, 다음 Windows에서이 같은 클래스 경로를 정의 할 수 있습니다 경우.

set CLASSPATH=bin;lib\*; 

이것은 당신이에 jar 파일을 추가 할 수 있습니다. \ lib 디렉토리에 저장되고 JRE의 새 인스턴스에 대한 클래스 경로에 자동으로 추가됩니다. 개별적으로 클래스 경로에 각 jar 파일을 추가했다 Setting the class path

이전 JDK 1.6 :

은 자세한 내용은이 링크를 참조하십시오.

6

이것을 관리하기 위해 leiningen과 lein-swank를 사용하는 것이 좋습니다. 디렉토리에서 REPL을 시작하고 Emacs에서 REPL에 연결할 수 있습니다.

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

0

난 그냥 내가 기회를 줄 필요가이 비트를 발견 디렉토리와 기본적으로 거기에 아무것도 포함됩니다. 과거에는 ~/classpath 디렉토리가 있었는데,이 디렉토리는 모든 항아리를 덤프하고 일반적으로 사용되는 디렉토리를 연결하며 훌륭하게 작동했습니다. 덤프하고 사용하는 아주 간단한 방법. 이제는 Maven clojure-maven-plugin을 사용하는 경향이 있으며 잘 작동하지만 약간의 아이디어로 주위를 둘러보고 싶을 때 약간 지루할 수 있습니다.

0

Clojure의-있는 contrib/발사기/bash는/CLJ-ENV-DIR 당신이 그것을 가리킬 수 있습니다 흥미로운 속성이 있습니다 :