省略莱宁根的部分来源

Omit sources partially in Leiningen

我有一个 API 需要导出,但是有很多代码我想避免被窥探。如果我包含 :omit-sources true,那么所有代码​​库都会消失,并且我的 API 不再可用于编译。

这是如何实现的?我将尝试使用 git 子模块,但我想知道是否有一种替代方法与我当前的项目布局兼容,例如,排除包以外的所有内容。

编辑:我有一个 data_readers.clj,如果我使用 :omit-sources

,它不会进入 JAR

我目前做的是包括 :filespecs [{:type :bytes :path "data_readers.clj" :bytes ~(slurp "src/main/shared/clj/data_readers.clj")}]

手动包含文件,但这会给 Cursive IntelliJ 插件带来麻烦。

您需要 :aot(提前编译)和 :omit-source

当不使用 :aot 时(这是默认设置),clojure 将尝试从 jar 中的源代码即时编译 类,因此它需要源代码。

您可以使用 :aot :all,如果您只想公开 api ns,则可以使用 :aot [my.awesome.api]

所以你的 project.clj 看起来像:

(defproject my-project ... ... :aot :all :omit-source true)

This thread from the clojure mailing list has info about this. Also the compilation page in clojure.org提前编译解释的很好:

Clojure compiles all code you load on-the-fly into JVM bytecode, but sometimes it is advantageous to compile ahead-of-time (AOT). Some reasons to use AOT compilation are:

  • To deliver your application without source
  • To speed up application startup
  • To generate named classes for use by Java
  • To create an application that does not need runtime bytecode generation and custom classloaders