2013-03-27 67 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