2011-10-12 114 views
0

是否有可能包括(導入?)其他文件到clojure項目的project.clj? (leiningen,具體而言)。包括其他文件到project.clj

例如,我們有:

(defproject sample-clojure-cloudbees "1.0.0-SNAPSHOT" 
    :description "Sample clojure application - clojure 1.3 !" 
    :some-key "some value") 

這將是很好定義像更多的東西:在比project.clj其他文件中的某些鍵。

+0

邁克爾,你能澄清你的意圖嗎?你只是想包括其他應該編譯的項目嗎?爲此,您可以指定依賴關係,這些依賴關係可以擁有自己的project.clj文件。 [示例](https://github.com/liebke/incanter/blob/master/project.clj)(然後查看'modules'目錄下的其他部分)。 – Paul

+1

看到我的回答爲您的其他問題, http://stackoverflow.com/questions/7738628/setting-a-project-property-to-a-non-literal-string-appears-to-not-work -in-leining/7739179#7739179 –

+0

Paul - 簡單地在外部文件中有一些配置條目 - 在這種情況下,我將添加到.gitignore中的祕密 - 但project.clj將清楚地「記錄」您需要提供祕密通過包含這個文件。例如,我做了類似於Play框架配置的東西(如果這意味着什麼的話)。 –

回答

2

沒有理由defproject必須是最高級別的形式。您可以通過構建參數列表來構建對defproject的調用。唯一的問題是defproject是一個宏,所以直接的「apply」函數將無濟於事。

(def extra-args (read-string (slurp "project-extension.clj"))) 
(eval (concat '(defproject sample-clojure-cloudbees "1.0.0-SNAPSHOT") 
       extra-args)) 

請注意,這是讀取文件,然後評估該文件中的元素。確保你知道文件來自哪裏!

+0

當然 - 在這種情況下,外部文件是本地和私人設置。在這種情況下,我仍然被宏指令絆倒,謝謝指出! –

+0

聽起來不錯 - 我想知道其他人是否會認爲這個功能足以成爲leiningen本身的功能? –