我有一个使用lein run
工作正常的项目。现在我想用lein uberjar
将它编译成一个独立的jar。但是,我的src/projectname/
目录中有几个源文件,例如我用{* 1}}和playground.clj
来试验emacs& repl,但我不想为最终项目编译。
使用类似stats.clj
的内容,我会指定应编译的所有文件。有了clojure / leiningen,似乎所有文件都是默认编译的 - 如何排除文件?我在leiningen的文档中找不到任何内容。
我目前正在使用make
。这是改变某些东西的地方吗?再说一次,我无法找到详细的文档。
更新
到目前为止,这些建议尚未奏效。然而,有效的是包含所有期望的命名空间,而不是排除那些不应编译的命名空间。 E.g:
:aot :all
答案 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-exclusions
,here来代替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)