我是一個初出茅廬的Clojure程序員,經驗豐富,他在日食中使用直接中間的Java。我試圖讓我的Java程序調用http://dev.clojure.org/display/doc/Getting+Started+with+Eclipse+and+Counterclockwise文章中創建的簡單的「hello」函數。 hello函數從通過逆時針插件啓動的Clojure REPL正常工作。當我嘗試從Java類執行hello函數時出現問題。從Java調用Clojure,他們說,這很容易,他們說
谷歌搜索顯示,基本上有兩種方法可以做到這一點:clojure.lang.RT可以加載Clojure源代碼並將其作爲腳本執行,或者直接將Clojure源代碼編譯爲JAR。
clojure.lang.RT變體沒有問題,但我完全不知道如何獲得直接調用變體的工作。在Java文件中,編譯器無法解析「myproject.core」。
Clojure的來源是core.clj是如下,並通過REPL工程就像一個冠軍:
(ns myproject.core
(:gen-class
:name myproject.core
:methods [#^{:static true} [hello [String] String]]))
(defn -main
"I don't do a whole lot."
[& args]
(println "Hello, World!"))
(defn hello [who] (str "Hello " who " !"))
的Java源代碼,但是,不會編譯:
import java.io.*;
import clojure.lang.*;
public class HelloJava {
public static void main(String[] args) {
loadResourceVariant();
directVariant();
}
public static void directVariant() {
myproject.core.hello("Bob");
}
public static void loadResourceVariant() {
try {
RT.loadResourceScript("myproject/core.clj");
// Get a reference to the hello function.
Var hello = RT.var("myproject.core", "hello");
// Invoke the hello function
Object result = hello.invoke("Robert");
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
}
}
}
的編譯器錯誤是...
myproject.core cannot be resolved to a type HelloJava.java /myproject/src line 11 Java Problem
如何配置我的逆時針項目將.class表示core.clj放入classes目錄,這樣它可以直接從Java引用?
這必須是可能的,而不需要全面的Maven之類。沒有?
Upvote for title :) –