省略莱宁根的部分来源
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
我有一个 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