Clojure 在leiningen中从编译中排除某些clj命名空间
我有一个项目,使用Clojure 在leiningen中从编译中排除某些clj命名空间,clojure,leiningen,uberjar,Clojure,Leiningen,Uberjar,我有一个项目,使用lein run可以很好地工作。现在我想使用leinuberjar将它编译成一个独立的jar。然而,在我的src/projectname/目录中有两个源文件,它们被称为playway.clj和stats.clj,我用来试验emacs和repl,但我不想为最终的项目编译它们 使用类似于make,我将指定应该编译的所有文件。使用clojure/leiningen,似乎所有文件都是默认编译的-如何排除文件?我在莱宁根的文件里什么也没找到 我目前正在使用:aot:all。这是换衣服的地
lein run
可以很好地工作。现在我想使用leinuberjar
将它编译成一个独立的jar。然而,在我的src/projectname/
目录中有两个源文件,它们被称为playway.clj
和stats.clj
,我用来试验emacs和repl,但我不想为最终的项目编译它们
使用类似于make
,我将指定应该编译的所有文件。使用clojure/leiningen,似乎所有文件都是默认编译的-如何排除文件?我在莱宁根的文件里什么也没找到
我目前正在使用:aot:all
。这是换衣服的地方吗?同样,我找不到关于这个的详细文档
更新:
到目前为止,这些建议还没有奏效。然而,有效的方法是包含所有需要的名称空间,而不是排除不应编译的名称空间。例如:
(defproject myproject“版本”
;; ...
:profiles{:uberjar{:aot[myproject.data]
myproject.db
myproject.util]})
试试这个(ns^:跳过aot我的ns)
你也可以
(ns ^{:skip-aot true} my-ns
(require [...]))
看一看,它描述了如何使用:jar排除
或:uberjar排除
在创建jar(分别是uberjar)时排除任意路径
老问题了,但我想我找到了后面那些人的答案 我在@amalloy的答案中找到了leiningen示例项目的链接,除了使用
源路径,而不是:jar排除
其想法是创建两个独立的源目录,一个用于您不想传播的内容,另一个用于您所做的内容:
dev-src/<your-project>/playground.clj
dev-src/<your-project>/stats.clj
src/<your-project>/<everything-else>
这样,当您在机器上乱搞时,这些文件将在jar中,当您部署到clojar或使用uberjar编译时,它们将不会包含在jar中,也不会被编译。对我来说不起作用。这与此有关吗?->来自同一源文件:“^:跳过aot将不会禁用:main的aot编译,当:aot为:all或包含main类时。”即,我需要将:all替换为要包含的所有文件的向量?这是正确的。您可以将代码从主ns移动到另一个主ns,并将^:跳过aot
添加到名称空间。我的主ns称为myproject.core
。我在myproject.stats
中的ns
指令中添加了^:skip aot
,但当我运行lein uberjar
时,它仍然希望编译stats
。我只能通过将stats.clj
重命名为stats.bak
来解决这个问题。我假设您的主nsmyproject.core
依赖于myproject.stats
中的代码。有什么原因不能定义哪些名称空间需要:aot
,而不是使用:all
?我当然选中了。没有这种依赖性<代码>统计数据
未在任何地方引用。尝试过的:uberjar排除[#“*”stats.clj“#“*”playder.clj”]
,未更改任何内容
dev-src/<your-project>/playground.clj
dev-src/<your-project>/stats.clj
src/<your-project>/<everything-else>