微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 clojure deps 在使用 `:local/root` 时将 `/main/clojure` 添加到类路径?

如何解决为什么 clojure deps 在使用 `:local/root` 时将 `/main/clojure` 添加到类路径?

我正在尝试使用 deps.edn 中的 tools.deps :local/root 选项将一个本地项目链接到另一个正在开发的本地项目。它不起作用。我不能要求库的命名空间,而且路径是正确的。

deps.edn 条目如下所示:

{:paths ["src" "resources"]
 :deps {...
        ...
        ...
        mylib {:local/root "../../../mylib"}
}}

然而,生成的类路径不正确:

../../../mylib/src/main/clojure

出于某种原因,clojure/main添加到这个库的类路径中,我不知道为什么。然后当我运行 clj 来启动 repl 时,我无法加载库,并且我得到了 FileNotFoundException

为了测试将 main/clojure 添加到 lib 路径是否有问题,我手动删除.cpcache 目录中缓存文件中的那部分路径,并且能够要求库命名空间一次我已经删除clojure/main

有谁知道 main/clojure 的来源以及如何阻止它被添加

更新

我做了一个新的测试,这让我认为这与在目标项目中使用 project.clj 而不是 deps.edn 有关。在测试中,我有一个带有 b 的项目 deps.edn,如下所示:

{:deps {a-proj {:local/root "../a-proj"}}}

虽然 a-proj 有这样的 project.clj

(defproject a-proj "0.1.0-SNAPSHOT"
  :description "blah"
  :url "http://example.com/FIXME"
  :license {:name "The MIT Licence"
            :url "https://opensource.org/licenses/MIT"}

  :source-paths ["src"]

  :dependencies [])

然后我运行 clj -Sforece -Spath 并得到:

~/Projects/b > clj -Sforce -Spath ethan at rembrandt.local src:/Users/ethan/.m2/repository/org/clojure/clojure/1.10.0/clojure-1.10.0.jar:/Users/ethan/Projects/b/src:/Users/ethan/Projects/a- proj/src/main/clojure:/Users/ethan/.m2/repository/org/clojure/spec.alpha/0.2.176/spec.alpha-0.2.176.jar:/Users/ethan/.m2/repository/ org/clojure/core.specs.alpha/0.2.44/core.specs.alpha-0.2.44.jar

您可以在那里看到添加/main/clojure 路径。当我在 deps.edn 中使用本质上的 a-proj 时:

{:deps {}}

我得到以下路径,这似乎是正确的:

~/Projects/b > clj -Sforce -Spath
src:/Users/ethan/.m2/repository/org/clojure/clojure/1.10.0/clojure-1.10.0.jar:/Users/ethan/Projects/b/../a-proj/src:/Users /ethan/.m2/repository/org/clojure/spec.alpha/0.2.176/spec.alpha-0.2.176.jar:/Users/ethan/.m2/repository/org/clojure/core.specs.alpha/ 0.2.44/core.specs.alpha-0.2.44.jar

我在 ~/.clojure 中的 deps.edn 只有这个:

{
 :aliases {
          :new {:extra-deps {seancorfield/clj-new {:mvn/version "0.9.0"}}
                  :main-opts ["-m" "clj-new.create"]}
          :deps {:extra-deps {org.clojure/tools.deps.alpha {:mvn/version "0.5.435"}}}
          :test {:extra-paths ["test"]}
  }
}

解决方法

Clojure CLI 通过 deps.edn 不支持将 project.clj 作为项目类型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。