在Eclipse中调试被Java代码调用的Clojure函数

4
在以下链接中调用Java的Clojure,演示了如何编写一段Clojure代码,我们可以直接在Java源代码中调用其功能。为了复制这个过程,我们需要一个名为tiny的Clojure项目,其中包含一个tiny.clj源文件。tiny.clj文件包含以下代码:
(ns tiny
  (:gen-class
    :name com.domain.tiny
    :methods [#^{:static true} [binomial [int int] double]]))

(defn binomial
  "Calculate the binomial coefficient."
  [n k]
  (let [a (inc n)]
    (loop [b 1
           c 1]
      (if (> b k)
        c
        (recur (inc b) (* (/ (- a b) b) c))))))

(defn -binomial
  "A Java-callable wrapper around the 'binomial' function."
  [n k]
  (binomial n k))

(defn -main []
  (println (str "(binomial 5 3): " (binomial 5 3)))
  (println (str "(binomial 10042 111): " (binomial 10042 111)))
)

将其导出为ttt.jar文件,然后将此文件添加到tinyJava项目(一个java项目)的“引用库”中。在tinyJava项目内部存在一个Main.java文件,其中包含以下代码:

import com.domain.tiny;

public class Main {

    public static void main(String[] args) {

        int j;
        j = (int)tiny.binomial(5, 3);
        System.out.println("(binomial 5 3): " + j);
        System.out.println("(binomial 10042, 111): " + tiny.binomial(10042, 111));

    }

}

输出结果如下:
(binomial 5 3): 10
(binomial 10042, 111): 4.9068389575068143E263

我的问题在Main.java中的以下位置:

j = (int)tiny.binomial(5, 3);

是否有可能进入Clojure源代码?我已经尝试过了,但没有成功。

谢谢。

[编辑]:我将jar文件添加到“引用库”中的方法如下:

1)右键单击项目tinyJava并选择属性

2)选择:Java Build Path

3)选择:Libraries

4)点击:“Add External Jars”

5)然后转到ttt.jar的位置

[编辑2]:对于Scala项目,似乎可以以稍微不同的方式实现此操作(请参见下文),即链接项目而不是显式地导出jar文件。


“step”是什么意思?你是指使用调试器逐步执行吗? - Pedro Montoto García
1个回答

2
例如,使用Scala似乎很容易做到这一点(请注意,以下文章还讨论了Interop:如何从Java调用Scala对象?)。
我所做的是:
1)设置一个名为firstScala的Scala项目,并添加一个名为MyPrinter.scala的文件,其中包含以下代码:
class MyPrinter{ 
  def printTerm() {
        print("hello");
  }
}

2) 接着我创建了一个名为 firstScalaJava 的 Java 项目,然后添加了一个名为 Main.java 的文件,并加入以下代码:

class Main {
    public static void main(String args[]) {
        MyPrinter myPrint = new MyPrinter();
        myPrint.printTerm();
    }
}

3) 然后我右键单击firstScalaJava,选择属性,选择Java Build Path,选择Projects标签,点击“添加”,然后选择firstScala项目。

4) 如果我在“myPrint.printTerm();”处设置断点,当调试器停在此处时,如果我点击F5,调试器会自动进入Scala源文件。

这个好处是我不需要导出任何jar文件或类似的东西。这很吸引人,因为在更改Scala代码后,不需要做任何事情(当尝试运行Java项目之后,Eclipse会自动重新构建Scala项目),而如果我更改Clojure代码,则需要重新导出jar等...(请注意,按照上述方式链接项目对于Clojure案例无效)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接