2013-03-27 66 views
2

我正在研究與Clojure和ClojureScript兼容的庫。使用Clojure/ClojureScript交叉庫

下面是該庫的project.clj:

(defproject libtest "0.1.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :url "http://example.com/FIXME" 
    :license {:name "Eclipse Public License" 
      :url "http://www.eclipse.org/legal/epl-v10.html"} 
    :dependencies [[org.clojure/clojure "1.4.0"]] 
    :plugins [[lein-cljsbuild "0.3.0"]] 
    :cljsbuild 
    {:crossovers [libtest], 
    :crossover-jar true 
    :jar true 
    :builds 
    [{:source-paths ["src/libtest"], :crossover-path "src/libtest"}]}) 

我包括它在其他項目的依賴。爲了得到它從我的項目的ClojureScript方共同努力,我不得不添加的確切名稱空間交叉我project.clj的cljsbuild項下:

(defproject some-other-project 
    ... 
    :dependencies [[org.clojure/clojure "1.5.0"] 
        [libtest "0.1.0-SNAPSHOT"]] 
    :cljsbuild { 
     :builds [{ 
    ... 
      :crossovers [libtest.core] 
    ... 

我的問題是,這是必要的?如果它在類路徑上,爲什麼我必須專門告訴它我將使用哪些命名空間?如果我需要使用幾十個命名空間,其中一些會引用其他命名空間等,這不能很好地擴展。

回答

0

這不是一個完美的解決方案,但適用於我。當一個名字空間被指定爲一個交叉時,它的子節點被遞歸地添加。所以:crossovers [libtest]也會加上libtest.core。如果指定:crossover-path,則可以看到在該目錄中生成了哪些文件。

+0

這可以在庫本身的project.clj中使用,但不適用於使用庫的項目。 – 2013-04-02 20:14:27