我想在我从Clojure创建的Java类中调用静态方法。我该怎么做?
我到目前为止所尝试的只是在与我的Clojure源相同的文件夹中创建一个Java类,但是我得到了一个ClassNotFoundException,或者我被告知没有这样的命名空间。我还尝试以各种不同的方式导入类,最后重复多次重新定义Java包声明,没有进一步的结果。
我正在使用Leiningen处理我的Clojure项目。
答案 0 :(得分:2)
您还必须在项目的project.clj文件中提供有关Java类位置的信息。
以下是一个例子。
Java类:
public class BestClass {
public static String testThis() {
return "Hello";
}
}
此类位于use-java\src\java
,其中use-java
是项目目录。
project.clj
:
(defproject use-java "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.8.0"]]
:java-source-paths ["src/java/"]
:main ^:skip-aot use-java.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}})
上述文件中的重要部分是:java-source-paths ["src/java/"]
。
请注意,您可以更改类的位置,但是:必须相应地更改java-source-paths。
core.clj
:
(ns use-java.core
(:import BestClass))
(defn try-out-java-method []
(BestClass/testThis))
致电try-out-java-method
给出:
use-java.core> (try-out-java-method)
"Hello"