Clojure测试依赖项

3
在我的project.clj中,我依赖于clj-http,它仅用于测试,使用的是clj-http.client。
当我查看为该项目创建的uberjar文件时,我发现与此依赖关联的类文件已被包含在其中。这使得jar文件比实际需要的更大。
因此,有没有一种方法可以在Clojure中定义依赖项,使其仅在测试期间使用,并且不包含在uberjar中?
我知道我可以在pom.xml中做到这一点,但是当使用Clojure时,pom.xml是自动生成的,所以我只能使用在project.clj文件中有效的方法。
为了增加更多细节,我的project.clj如下所示:
(defproject aproject "0.1.0-SNAPSHOT"
  :description "A project"
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [org.clojure/data.json "0.2.6"]
                 [compojure "1.5.0"]
                 [hiccup "1.0.5"]
                 [http-kit "2.1.18"]
                 [org.clojure/tools.logging "0.3.1"]
                 [ch.qos.logback/logback-classic "1.1.7"]
                 [ring/ring-devel "1.4.0"]]
  :plugins [[lein-ring "0.9.7"]]
  :ring {:handler aproject.core/app-routes}
  :main ^:skip-aot aproject.core
  :target-path "target/%s"
  :resources-paths ["resources/"]
  :profiles {:uberjar {:aot :all}
             :dev     {:dependencies [[peridot "0.4.3"]
                                      [midje "1.8.3"]]
                       :plugins      [[lein-midje "3.2.1"]]
                       :aliases      {"test" ["midje"]}}
              :test     {:dependencies [[clj-http "3.5.0"]
                                   [midje "1.8.3"]]
                    :plugins      [[lein-midje "3.2.1"]]}
         })

我是这样运行测试的:

lein with-profile test midje :filters dt

我看到的是:
Exception in thread "main" java.io.FileNotFoundException: Could not locate midje/util/ecosystem__init.class or midje/util/ecosystem.clj on classpath., compiling:(/private/var/folders/7l/0fwd_7ls1m19q3_z1_tgg1w80000gn/T/form-init7253661442775183594.clj:1:125)
    at clojure.lang.Compiler.load(Compiler.java:7391)

这个过滤器可能不会影响这个,但是为了保险起见,测试看起来是这样的:
(ns aproject.deployment.core
  (:require [midje.sweet :refer :all]
            [clj-http.client :as client]
            [peridot.core :as p]
            [clojure.data.json :as json]
            [front-end.core :as fe]))

(facts "'aproject' deployed" :dt
       (let [response (client/get "http://localhost:8080/ping")]
         (response :status) => 200
         ))

我看到测试配置文件正在被触发,并且我似乎拥有中间件的依赖项和插件,但是…?
谢谢。
Nathan

5
你可以将特定依赖项添加到Leiningen中的:test(或者:dev)配置文件中。在此处了解更多关于配置文件的信息:https://github.com/technomancy/leiningen/blob/master/doc/PROFILES.md - leetwinski
1个回答

2
将其添加到:test配置文件中,然后使用lein with-profile test midje:filters dt运行测试。像往常一样生成您的超级jar包,lein uberjar,它不应包括额外的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接