2014-12-02 17 views
7

Tôi có một dự án hoạt động tốt bằng cách sử dụng lein run. Bây giờ tôi muốn biên dịch nó thành một cái lọ độc lập sử dụng lein uberjar. Tuy nhiên, có một vài tệp nguồn trong thư mục src/projectname/ của tôi được gọi là e.g. playground.cljstats.clj mà tôi sử dụng để thử nghiệm với emacs & repl, nhưng tôi không muốn biên dịch cho dự án cuối cùng.loại trừ các không gian tên clj nhất định khỏi quá trình biên dịch trong leiningen

Với thứ gì đó như make, tôi sẽ chỉ định tất cả các tệp cần được biên dịch. Với clojure/leiningen, có vẻ như, tất cả các tệp được biên dịch theo mặc định - làm cách nào để loại trừ tệp? Tôi đã không tìm thấy bất cứ điều gì trong các tài liệu leiningen.

Tôi hiện đang sử dụng :aot :all. Đây có phải là nơi để thay đổi điều gì đó không? Một lần nữa, tôi không thể tìm thấy tài liệu chi tiết về điều này.

UPDATE:

Những gợi ý cho đến nay chưa từng làm việc. Tuy nhiên, những gì đã làm việc là để bao gồm tất cả các không gian tên mong muốn thay vì loại trừ các không gian tên không được biên dịch. Ví dụ:

(defproject myproject "version" 
    ;; ... 
    :profiles {:uberjar {:aot [myproject.data 
          myproject.db 
          myproject.util]}}) 

Trả lời

0

Hãy thử điều này (ns ^:skip-aot my-ns)

Bạn cũng có thể làm

(ns ^{:skip-aot true} my-ns 
    (require [...])) 

Source

+1

Đã không hiệu quả đối với tôi. Điều này có liên quan gì đến nó không? -> Từ cùng một tệp nguồn: "^: skip-aot sẽ không tắt tính năng biên dịch AOT: chính khi: aot là: tất cả hoặc chứa lớp chính." I E. Sau đó tôi cần phải thay thế: tất cả bằng một vectơ của tất cả các tệp để bao gồm? – pholz

+0

Đúng vậy. Bạn có thể di chuyển mã từ ns chính sang ns khác và thêm '^: skip-aot' vào không gian tên – runexec

+0

Vâng, ns chính của tôi được gọi là' myproject.core'. Tôi đã thêm '^: skip-aot' vào chỉ thị' ns' trong 'myproject.stats' nhưng khi tôi chạy' lein uberjar', nó vẫn muốn biên dịch 'stats'. Tôi chỉ có thể giải quyết vấn đề bằng cách đổi tên 'stats.clj' thành' stats.bak'. – pholz

2

Có một cái nhìn tại leiningen's sample project.clj, trong đó mô tả làm thế nào để sử dụng :jar-exclusions hoặc :uberjar-exclusions để loại trừ đường dẫn tùy ý khi tạo lọ (resp. uberjars).

;; Files with names matching any of these patterns will be excluded from jars. 
    :jar-exclusions [#"(?:^|/).svn/"] 
    ;; Files with names matching any of these patterns will included in the jar 
    ;; even if they'd be skipped otherwise. 
    :jar-inclusions [#"^\.ebextensions"] 
    ;; Same as :jar-exclusions, but for uberjars. 
    :uberjar-exclusions [#"META-INF/DUMMY.SF"] 
+0

đã cố gắng ': uberjar-exclusions [#". * Stats.clj "#". * Playground.clj "]', không thay đổi bất cứ điều gì – pholz

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