2014-12-02 112 views
7

我有一个使用lein run可以正常工作的项目。现在我想用lein uberjar将它编译成独立的jar。但是,我的src/projectname/目录中有几个源文件,例如, playground.cljstats.clj,我用它来试验emacs & repl,但是我不想为最终的项目编译。从列宁宁编译中排除某些clj命名空间

make这样的东西,我会指定所有应该编译的文件。用clojure/leiningen,似乎所有文件都是默认编译的 - 如何排除文件?我没有在Leiningen文档中找到任何内容。我正在使用:aot :all。这是改变一些东西的地方吗?再一次,我找不到关于此的详细文档。

UPDATE:

的建议,至今都没有奏效。但是,有效的是,包括所有需要的名称空间,而不是排除不应编译的名称空间。例如:

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

回答

0

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

你也可以做

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

Source

+1

没有为我工作。这与它有什么关系? - >从相同的源文件:“^:skip-aot将不会禁用AOT编译:main时:aot是:all或包含主类。”即那么我需要将所有文件都包含在内? – pholz 2014-12-02 10:35:09

+0

这是正确的。你可以将代码从主ns移到另一个,并在命名空间中添加'^:skip-aot' – runexec 2014-12-02 12:28:28

+0

那么,我的主ns被称为'myproject.core'。我在'myproject.stats'的'ns'指令中添加了'^:skip-aot',但是当我运行'lein uberjar'时,它仍然想编译'stats'。我只能通过将'stats.clj'重命名为'stats.bak'来解决这个问题。 – pholz 2014-12-02 13:43:12

2

看一看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"] 
+0

尝试':uberjar-exclusions [#“。* stats.clj”#“。* playground.clj”]',没有改变任何东西 – pholz 2014-12-04 09:37:36