2012-06-05 25 views
19

Tôi mới dùng Clojure và thực sự bối rối về cách tôi nên chạy chương trình Clojure.cách điển hình để chạy chương trình clojure

Câu hỏi đầu tiên của tôi là liệu mỗi chương trình Clojure có phải là gói Leiningen không? Nếu tôi muốn viết, tôi có bắt đầu bằng cách tạo một dự án Leiningen mới không? Có một chương trình Clojure tương tự như Python (ví dụ: python pyfile.py)

Tôi nhận ra đây có thể là một câu hỏi ngu ngốc, nhưng tôi đã nhầm lẫn về điều này một thời gian và vài cuốn sách/hướng dẫn mà tôi đã trải qua dường như không trả lời câu hỏi này đúng cách. Bây giờ, tôi đã chạy mã Clojure chỉ trong REPL.

Trả lời

25

Vì bạn đã tìm thấy leiningen ngay lập tức, bạn đang đi đúng hướng. Nó không phải là một câu hỏi ngớ ngẩn bởi vì trả lời nó sẽ giúp người khác nhận được kết quả google tốt hơn.

  • mỗi chương trình clojure phải là một dự án leiningen riêng biệt, vì vậy bạn chạy lein new project-name cho mỗi dự án.

  • kết quả của việc xây dựng một dự án Clojure là giống như một dự án Java, một tập tin JAR được chạy với java -jar myproject-standalone.jar ví dụ

  • leiningen có thể xây dựng một kịch bản wrapper vỏ cho bạn rằng tạo ra một file sh chỉ cần gọi java -jar

  • Khi tôi chạy chương trình clojure trong sản xuất tại nơi làm việc, chúng tôi chỉ kiểm tra chúng ra khỏi git và sau đó gọi lein run trong thư mục (thực tế Jenkins thực hiện việc này).

+0

Làm cách nào để bạn chặn số phiên bản trong tệp mục tiêu '.jar'? – nekonari

+2

thêm ': uberjar-name" sample-standalone.jar "vào tệp project.clj của bạn. xem dự án mẫu: https://github.com/technomancy/leiningen/blob/master/sample.project.clj#L382 –

9

Một điều để thêm vào câu trả lời tuyệt vời Arthur Ulfeldt là rằng Lein tạo ra một project.clj cho bạn, và chức năng chính của bạn (chức năng nơi thực hiện chương trình bắt đầu từ) có thể được định nghĩa trong đó. Theo mặc định Leiningen tạo hàm chính trong một tập tin gọi là core.clj Ví dụ:

(defproject music "1.0.0-SNAPSHOT" 
    :description "A workspace for my music experiments" 
    :dependencies [ 
    [org.clojure/clojure "1.3.0"] 
    [org.clojure/math.combinatorics "0.0.1"] 
    ] 
    :main music.core) 

tại dự án của tôi có thể chạy bằng:

lein run 

và chức năng chính trong music.core sẽ được chạy.

2

tôi kịch bản bash clojure:

#!/bin/sh 

export CLOJURE_EXT=$HOME/.clojure 
export CLOJURE_OPTS="-Xmx1g -server" 

LIBS=$(ls -1 $CLOJURE_EXT/* 2> /dev/null) 
export CLASSPATH=.:$CLOJURE_EXT:$CLASSPATH:"$(echo "$LIBS" | tr \\n :)" 

JAVA=${CLOJURE_JAVA:-java} 
OPTS=${CLOJURE_OPTS:-} 
MAIN=${CLOJURE_MAIN:-clojure.main} 

breakchars="(){}[],^%$#@\"\";:''|\\" 

if [ $# -eq 0 ]; then 
    exec rlwrap --remember -c -b $breakchars \ 
     -f $HOME/.clj_completions \ 
     --history-filename=$HOME/.clj_history --histsize=1000000 \ 
     $JAVA $OPTS $MAIN -i $HOME/.clojure.clj --repl 
else 
    exec $JAVA $OPTS $MAIN "[email protected]" 
fi 

tiết kiệm họ $ HOME/bin/clojure, chmod + x $ HOME/bin/clojure, bản sao clojure.jar và thư viện của bên thứ 3 vào $ HOME/.clojure, bạn có thể chạy clojure your_program.clj như trăn pyfile.py

6

có lẽ cách dễ nhất sẽ được sử dụng để chạy lein-exec Clojure kịch bản:

http://charsequence.blogspot.in/2012/04/scripting-clojure-with-leiningen-2.html

+1

Điều này thực sự thêm vào câu trả lời trong câu hỏi này, như một phần của câu hỏi là "Có cách nào không chạy các chương trình Clojure tương tự như Python? " Câu trả lời này cho chúng ta thấy làm thế nào. Đôi khi, tôi chỉ muốn chạy một kịch bản. – djhaskin987

5

Để trả lời một phần câu hỏi: "Có chạy chương trình Clojure tương tự như Python không?" Bạn thực sự chỉ có thể chạy một kịch bản clojure như thế này (gọi tắt là hello.clj):

(println "Hello!") 

như thế này:

clojure hello.clj 

EDIT: Sau đây nên làm việc trên tất cả hệ thống:

java -jar <path-to-clojure-jar>/clojure.jar hello.clj 

Trên hệ thống của tôi, tệp clojure.jar được tìm thấy trong /usr/share/clojure/clojure.jar. để dập tắt clojure, chỉ cần chạy một lệnh giống như lệnh ở trên.

+0

Tính năng này có hoạt động trên tất cả các hệ thống không? Tôi biết rằng việc cài đặt từ aptitude trên Ubuntu cung cấp cho bạn một lệnh 'clojure', nhưng tôi không biết rằng điều này là đúng đối với các cài đặt khác. Sẽ là tốt để xác minh và cập nhật ở đây. – metasoarous

+0

Tôi đã cập nhật điều này để nó hoạt động trên tất cả các hệ thống. – djhaskin987

0

Như một bản cập nhật, một cách đơn giản để đối phó với các chương trình clojure là sử dụng leiningen

Nếu bạn muốn chạy script clojure nhỏ, sử dụng lein-exec

0

Tạo một bí danh trong .bashrc tập tin của bạn, hoặc tương đương:

alias clojure="java -jar path/to/clojure-x.x.x.jar"

Sau đó, bạn có thể chạy clojure my-file.clj trong terminal của bạn.

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