【问题标题】:Can you have leiningen load library code from locally checked out source?您可以从本地签出的源代码中加载 leiningen 库代码吗?
【发布时间】:2013-07-25 02:34:44
【问题描述】:

假设我正在破解我在项目中使用的 clojure 库:

/用户/SCdF/代码/myproject/
/User/SCdF/Code/other-peoples-projects/clojure-library-cloned-from-github

目前,当我在 clojure-library-cloned-from-github 中进行更改时,我会运行 lein install 将我的新版本推送到本地存储库(我已将我和他们的 project.clj 更改为指向更新的 -SNAPSHOT 版本库,因此每次都会更新),然后在myproject 上重新启动/运行lein deps

有没有办法告诉 leiningen 在 ../../clojure-library-cloned-from-github 中查找库的源代码,而不是使用 maven 和 jar,这样当我对代码进行更改时,它们会在运行时看到?

【问题讨论】:

    标签: clojure leiningen


    【解决方案1】:

    查看 Leiningens checkout dependencies 功能。

    基本上,您在当前项目的名为“checkouts”的子目录中创建一个指向库目录的符号链接,并将其添加到您的 Leiningen 配置文件中。现在,每当您的程序从 Leiningen(REPL,运行)启动时,该项目也会被加载。

    如果您在 Windows 上,您需要将 NTFS 等同于指向目录的符号链接,而不是创建符号链接,称为“junction point”。

    如果您的项目实际上不是通过 Leiningen 启动的(例如在 Eclipse/CounterClockWise 中),请注意这不起作用。如果从 CounterClockWise 运行,则需要将所需的库添加为 Eclipse 项目,然后编辑您自己项目的 Eclipse 项目属性:在 Java Build Path > Projects 下,添加库项目。

    现在,如果您从 Eclipse REPL 开始,该库将包含在 java 类路径中。但是,如果您希望项目在通过 Leiningen 运行时也能正常工作,您还需要使用结帐功能。

    当然,当你想为你的程序做一个独立的构建时,签出方式将不再起作用,你需要将库作为正常的依赖项包含在内,或者在你的 uberjar 中包含一个构建版本。

    【讨论】:

    • 附带问题,这不会混淆 git 吗?在'nix上,我想它知道软链接,你可以告诉它不要跟随它们,但NTFS上的连接点不是基本上透明的吗?我想您将checkouts/ 添加到.gitignore
    • 是的,结账是本地开发的唯一功能。这就是为什么您还需要在项目依赖项中实际添加库的原因,结帐版本只是优先于它。所以在你的版本控制中忽略它是个好主意。
    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 2015-01-08
    • 2014-01-24
    • 2010-11-25
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多