2014-12-02 113 views
7

我有一個使用lein run可以正常工作的項目。現在我想用lein uberjar將它編譯成獨立的jar。但是,我的src/projectname/目錄中有幾個源文件,例如, playground.cljstats.clj,我用它來試驗emacs & repl,但是我不想爲最終的項目編譯。從列寧寧編譯中排除某些clj命名空間

make這樣的東西,我會指定所有應該編譯的文件。用clojure/leiningen,似乎所有文件都是默認編譯的 - 如何排除文件?我沒有在Leiningen文檔中找到任何內容。我正在使用:aot :all。這是改變一些東西的地方嗎?再一次,我找不到關於此的詳細文檔。

UPDATE:

的建議,至今都沒有奏效。但是,有效的是,包括所有需要的名稱空間,而不是排除不應編譯的名稱空間。例如:

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

回答

0

試試這個(ns ^:skip-aot my-ns)

你也可以做

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

Source

+1

沒有爲我工作。這與它有什麼關係? - >從相同的源文件:「^:skip-aot將不會禁用AOT編譯:main時:aot是:all或包含主類。」即那麼我需要將所有文件都包含在內? – pholz 2014-12-02 10:35:09

+0

這是正確的。你可以將代碼從主ns移到另一個,並在命名空間中添加'^:skip-aot' – runexec 2014-12-02 12:28:28

+0

那麼,我的主ns被稱爲'myproject.core'。我在'myproject.stats'的'ns'指令中添加了'^:skip-aot',但是當我運行'lein uberjar'時,它仍然想編譯'stats'。我只能通過將'stats.clj'重命名爲'stats.bak'來解決這個問題。 – pholz 2014-12-02 13:43:12

2

看一看leiningen's sample project.clj,其中介紹瞭如何使用:jar-exclusions:uberjar-exclusions排除任意路徑當創建罐子(分別爲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

嘗試':uberjar-exclusions [#「。* stats.clj」#「。* playground.clj」]',沒有改變任何東西 – pholz 2014-12-04 09:37:36