【问题标题】:How can you make leiningen evaluate requires before implements?如何让 leiningen 在实施之前评估需求?
【发布时间】:2014-06-03 12:35:19
【问题描述】:

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

我有一个类定义如下

(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 中的一个定义接口,如下所示...

(ns myns.myext.core)

(definterface client
  (^void foo [])
)

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

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

【问题讨论】:

    标签: java clojure interop leiningen


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-28
        • 2019-07-02
        • 1970-01-01
        相关资源
        最近更新 更多