java - 省略莱宁根的部分来源

标签 java clojure 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,或者 :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/

相关文章:

python - 混合使用 Clojure 和 Python 是个好主意吗?

clojure - 无法让胭脂红 mq worker 保持打开状态

clojure - Leiningen 中的本地依赖项而不创建 Maven 存储库?

java - 将 OpenSessionInViewInterceptor 与 Hibernate 和 JSF 2 结合使用

java - Spring Data Rest 中嵌套资源的分页

clojure - 我可以只在 Java 类上使用 Clojure 多方法吗?

swing - 是否可以有一个带有事件处理程序的项目符号列表?

java - 让 Leiningen 在 Mac OS X 10.7.2 上运行

java - Android 2.1 SDK + ConcurrentHashMap$ValueIterator 与 GC

java - 尽管预期和实际相似,但 junit 中的 ArrayList 相等不起作用