Я следовал this tutorial, чтобы позвонить Clojure из Java в Eclipse с помощью Leiningen. Я хочу закодировать AI моей игры в Clojure и сделать все остальное в LibGDX для ОС Android.NoClassDefFoundError, вызывающий Clojure с Java (Android, LibGDX)
После того, как я закончил сторону Clojure, я использую LEIN команду, чтобы упаковать его в файл JAR (#lein компилировать, #lein бежать, #lein uberjar).
Я добавляю файл jar с помощью правой кнопкой мыши по проекту> Свойства> Путь сборки Java> Библиотеки> Добавить внешние JAR ...> myai-0.1.0-SNAPSHOT-standalone.jar.
Проблема возникает, когда я выполняю игру.
import myai.*;
public class Stack extends Actor {
...
public void draw(SpriteBatch batch, float parentAlpha) {
System.out.println("Binomial = " + core.binomial(5, 15));
}
...
}
Я получаю эту ошибку:
12-26 00:27:01.570: I/dalvikvm(8384): Could not find method myai.core.binomial, referenced from method my.package.Stack.draw
12-26 00:27:01.570: E/AndroidRuntime(2281): FATAL EXCEPTION: GLThread
12-26 00:27:01.570: E/AndroidRuntime(2281): java.lang.NoClassDefFoundError: myai.core
12-26 00:27:01.570: E/AndroidRuntime(2281): at my.package.Stack.draw(Stack.java:297)
12-26 00:27:01.570: E/AndroidRuntime(2281): at my.package.GameScreen.render(GameScreen.java:146)
12-26 00:27:01.570: E/AndroidRuntime(2281): at com.badlogic.gdx.Game.render(Game.java:46)
12-26 00:27:01.570: E/AndroidRuntime(2281): at my.package.MyGame.render(MyGame.java:23)
12-26 00:27:01.570: E/AndroidRuntime(2281): at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:487)
12-26 00:27:01.570: E/AndroidRuntime(2281): at com.badlogic.gdx.backends.android.surfaceview.GLSurfaceViewCupcake$GLThread.guardedRun(GLSurfaceViewCupcake.java:713)
12-26 00:27:01.570: E/AndroidRuntime(2281): at com.badlogic.gdx.backends.android.surfaceview.GLSurfaceViewCupcake$GLThread.run(GLSurfaceViewCupcake.java:646)
Я действительно не знаю, почему это происходит потому, что я выполнил все действия, описанные в руководстве.
Это мои Clojure файлы:
project.clj
(defproject myai "0.1.0-SNAPSHOT"
:description "AI for my game"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.5.1"]]
:aot [myai.core]
:main myai.core)
core.clj
(ns myai.core
(:gen-class
:name myai.core
: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
[& args]
(println "My Game Artificial Intelligence")
(println (str "(binomial 5 3): " (binomial 5 3)))
)
Спасибо s заранее! :)
EDIT: Он не работает ни в Ubuntu с командами командной строки.