use*_*835 5 java clojure leiningen
我有一个我需要导出的API,但是我希望避免使用大量代码.如果我包含:omit-sources true,则所有代码库都会消失,并且我的API不再可用于编译.
怎么能实现这一目标?我将尝试使用git子模块,但我想知道是否有一种与我当前项目布局兼容的替代方法,如同,除了包之外的所有内容.
编辑:我有一个data_readers.clj,如果我使用它将不会进入JAR:omit-sources
我目前做的是包括: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 my-project ...
...
:aot :all
:omit-source true)
来自 clojure 邮件列表的这个线程有关于这个的信息。clojure.org 中的编译页面也很好地解释了提前编译:
Clojure 将您即时加载的所有代码编译为 JVM 字节码,但有时提前编译 (AOT) 更有优势。使用 AOT 编译的一些原因是:
- 无源交付您的应用程序
- 加速应用程序启动
- 生成供 Java 使用的命名类
- 创建不需要运行时字节码生成和自定义类加载器的应用程序
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |