【问题标题】:Get Clojure namespaces in current .jar file在当前 .jar 文件中获取 Clojure 命名空间
【发布时间】:2012-12-11 00:19:45
【问题描述】:

我正在寻找一种方法来获取当前项目中所有当前命名空间的列表,即在导入的 jar、库等中排除命名空间。

目前我发现bultitude 似乎非常接近我需要并且可以做到的:

(bultitude.core/namespaces-on-classpath)

但是,这会返回类路径上的所有命名空间,包括“clojure.core”等,而不仅仅是当前项目中的命名空间。

有没有简单可靠的方法来解决这个问题?

【问题讨论】:

    标签: clojure namespaces classpath


    【解决方案1】:

    tools.namespace 库呢?有api:

    find-namespaces-in-dir
    find-namespaces-in-jarfile
    find-namespaces-on-classpath
    

    【讨论】:

    • 看起来很有趣,但似乎与 bultitude 非常相似——即似乎没有“当前项目”的概念。还是我遗漏了一些明显的东西?
    • Bultitude 本质上是对 tools.namespace 的不那么疯狂和更开放的重写。如果它不起作用,则 tools.namespace 不会。
    【解决方案2】:

    好吧,这取决于。

    bultitude 背后的想法是在类路径上提供命名空间列表。该类路径上的任何 .clj 文件都将被考虑在内。

    但是,您只能查找以某个前缀开头的命名空间。通常项目也在其命名空间中以某个前缀开头。那行得通吗?自述文件中的示例:

    user=> (b/namespaces-on-classpath :prefix "bultitude")
    (bultitude.core-test bultitude.core)
    

    如果这还不够好,您可以尝试为其提供一个只有您的文件所在的类路径,但这可能效果不佳。

    user=> (b/namespaces-on-classpath :prefix "bultitude" :classpath "src:test")
    (bultitude.core bultitude.core-test)
    

    【讨论】:

    • 谢谢,很高兴能从图书馆作者本人那里得到答案!我认为使用 :classpath 选项只有在你有正确的文件结构时才有效?
    • @mikera 只要您没有将自己的文件与其他项目的文件混合(这不太可能),它应该可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多