您:source-paths
在 Leiningen 中的密钥决定了检查 Clojure 源代码的目录。使用每个环境的设置,:source-paths
您可以防止不需要的名称空间包含在您部署的 uberjar 中。
下一个难题是确保您的代码不依赖于生产实例上的开发代码。这可以在environ
lib 的帮助下完成。
; excerpt of project.clj
(defproject your-org/your-project "version"
:source-paths ["src"] ; the main source location
:profiles {:dev {:source-paths ["dev-src"] ; added directory
:env {:dev "true"}}}
...)
; excerpt of project code for src/your_org/your_project.clj
(ns your-org.your-project
(:require environ.core :refer [env]))
(def maybe-launch-optional-thing
(if (= (env :dev) "true") ; checking a profile specific value
(do (require 'dev-only-dep.core)
(resolve 'dev-only-dep/launch))
(constantly nil))
...
(defn -main
[& args]
(maybe-launch-optional-thing)
...)
if
包装的require
和 的使用resolve
确保此代码有效,无论是否dev-only-dep.core
可用。maybe-launch-optional-thing
绑定到:dev
配置文件下可选命名空间中的适当函数,否则为无操作。