从leiningen的编译中排除某些clj名称空间

时间:2014-12-02 10:10:22

标签: clojure leiningen uberjar

我有一个使用lein run工作正常的项目。现在我想用lein uberjar将它编译成一个独立的jar。但是,我的src/projectname/目录中有几个源文件,例如我用{* 1}}和playground.clj来试验emacs& repl,但我不想为最终项目编译。

使用类似stats.clj的内容,我会指定应编译的所有文件。有了clojure / leiningen,似乎所有文件都是默认编译的 - 如何排除文件?我在leiningen的文档中找不到任何内容。

我目前正在使用make。这是改变某些东西的地方吗?再说一次,我无法找到详细的文档。

更新

到目前为止,这些建议尚未奏效。然而,有效的是包含所有期望的命名空间,而不是排除那些不应编译的命名空间。 E.g:

:aot :all

3 个答案:

答案 0 :(得分:3)

查看leiningen's sample project.clj,其中介绍了如何在创建广告时使用:jar-exclusions:uberjar-exclusions排除任意路径(分别为uberjars)。

  ;; Files with names matching any of these patterns will be excluded from jars.
  :jar-exclusions [#"(?:^|/).svn/"]
  ;; Files with names matching any of these patterns will included in the jar
  ;; even if they'd be skipped otherwise.
  :jar-inclusions [#"^\.ebextensions"]
  ;; Same as :jar-exclusions, but for uberjars.
  :uberjar-exclusions [#"META-INF/DUMMY.SF"]

答案 1 :(得分:1)

古老的问题,但我想我找到了那些追随我的人的答案。

我在@amalloy的答案的示例leiningen项目的链接中找到了答案,除了我使用:jar-exclusionshere来代替source-paths

这个想法是创建两个单独的源目录,一个目录用于您不需要分发的东西,另一个目录用于您要做的事情:

dev-src/<your-project>/playground.clj
dev-src/<your-project>/stats.clj
src/<your-project>/<everything-else>

然后,在您的project.clj中,将src通常包含在source-paths中,并将emacs-src包含在您希望其可见的特殊配置文件中,例如通常的:dev个人资料:

{
   ;; ...
   :source-paths ["src"]
   :profiles {
      :dev {
         :source-paths ["src" "dev-src"]
      }
   }
}

这样,当您在计算机上弄乱这些文件时,这些文件将位于jar中,而当您部署到clojars或使用uberjar进行编译时,这些文件将不会包含在jar中,也不会被编译。

答案 2 :(得分:0)

试试这个(ns ^:skip-aot my-ns)

您也可以

(ns ^{:skip-aot true} my-ns
    (require [...]))

Source