如何在实施之前让leiningen评估需求?

时间:2014-06-03 12:35:20

标签: java clojure interop leiningen

这似乎是一个错误,但我想知道是否有办法解决这个问题。

我有一个如下定义的类

(ns myns.myext.anotherext.client
  (:gen-class 
     :implements [myns.myext.core.client]
     :prefix -
     :init init
     :state state
   )
   (:require [myns.myext.core])
)

我不知道它是否显而易见,但myns.myext.core.client是myns.myext.core中的一个definterface,如下所示......

(ns myns.myext.core)

(definterface client
  (^void foo [])
)

这是一个没有main但不会编译的库。它正在获得一个未找到类的异常,因为它试图在myns.myext.core之前编译myns.myext.core.client。有什么黑客我可以用来迫使liningen以正确的顺序编译这些吗?项目定义使用:aot:all。代码没有问题,因为如果我在gen类中注释掉implements,编译,取消注释实现并重新编译它就可以了。不能期望最终用户改变代码只是为了让库得到编译。

版本:Leiningen 2.3.4 on Java 1.7.0_55 Java HotSpot(TM)64位服务器VM

2 个答案:

答案 0 :(得分:2)

只需在gen-class之前编写require。应按顺序评估代码。

答案 1 :(得分:2)

在这个网站之外,我被指出了一个有效的解决方案。我在我的project.clj中添加了以下内容,这是我解决问题的唯一方法。

  :prep-tasks [["compile" "myns.myext.core"]
               "javac" "compile"]