9

我有一个使用lein run. 现在我想使用lein uberjar. 但是,在我的目录中有几个src/projectname/名为 egplayground.clj的源文件stats.clj,我用它们来试验 emacs 和 repl,但我不想为最终项目编译。

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

我目前正在使用:aot :all. 这是改变什么的地方吗?同样,我找不到有关此的详细文档。

更新:

到目前为止,这些建议都没有奏效。然而,有效的方法是包含所有需要的命名空间,而不是排除那些不应该编译的命名空间。例如:

(defproject myproject "version"
  ;; ...
  :profiles {:uberjar {:aot [myproject.data
                             myproject.db
                             myproject.util]}})
4

3 回答 3

3

查看leiningen 的示例 project.clj ,它描述了在创建 jars(resp. uberjars)时如何使用:jar-exclusions或排除任意路径。:uberjar-exclusions

  ;; 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"]
于 2014-12-03T21:21:45.027 回答
1

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

我从@amalloy 的答案中找到了示例 leiningen 项目的链接中的答案,除了我在这里:jar-exclusions使用source-paths,而不是。

这个想法是创建两个单独的源目录,一个用于您不想传播的东西,一个用于您做的东西:

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

然后,在您的 project.clj 中,正常包含,并包含src在您希望它可见的特殊配置文件中,例如通常的配置文件:source-pathsemacs-src:dev

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

这样,当您在机器上乱搞时,这些文件将在 jar 中,而当您部署到 clojars 或使用 uberjar 编译时,它们不会包含在 jar 中,也不会编译。

于 2020-06-22T03:49:41.697 回答
0

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

你也可以做

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

资源

于 2014-12-02T10:11:40.363 回答