我有一个需要导出的 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
,或者 :aot [my.awesome.api]
如果你打算只公开你的 api ns。
因此您的 project.clj 将如下所示:
(defproject 我的项目...
...
:aot:所有
:omit-source true)
This thread来自 clojure 邮件列表有关于此的信息。还有 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
关于java - 省略莱宁根的部分来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31517237/