为什么gradle-clojure插件会跳过compileClojure任务?

时间:2018-11-03 12:40:05

标签: gradle clojure intellij-plugin

我正在尝试在Clojure中为Intellij编写插件。为此,我想使用Clojure的:gen-class功能来实现一些扩展端点。我已经添加了gradle-clojure插件,并在src/main/clojure中放置了一些Clojure代码。但是当我构建项目时,它会说

> Task :compileClojure SKIPPED

那是为什么?

另外,在相关说明中:如果将表达式(throw (Exception. "abort"))添加到顶层的Clojure代码中,则可能使构建崩溃。这对我来说没有意义。为什么在构建过程中,Clojure代码会被执行

1 个答案:

答案 0 :(得分:2)

在Clojure中,不需要预编译。只要源代码捆绑在.jar文件中,就可以在首次运行时对其进行编译。

对于gradle-clojure来说,默认的build任务将运行checkClojure,它将在每个源目录上调用Clojure load函数,该函数将加载所有名称空间。加载名称空间时,其表达式将按顺序执行。通常,您只需要输入defdefn就可以定义全局变量。这样做是为了确保在.jar绑定之前没有编译器错误。

gradle-clojure compileClojure任务将仅编译使用aotNamespaces或所有使用aotAll()配置的名称空间。在这种情况下,它将在每个名称空间上调用Clojure compile。有关更多信息,请参见gradle-clojure文档。

有关Clojure编译的更多详细信息,请参见this documentation