2011-10-14 3 views
3

Я создаю приложение Java, которое загружает файлы Clojure. У меня возникли проблемы с созданием единого исполняемого банку. Я использую один-Jar, но я получаю исключение при попытке запустить файл банки:Выполнение исполняемого jar, который вычисляет строки Clojure

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at com.simontuffs.onejar.Boot.run(Boot.java:340) 
    at com.simontuffs.onejar.Boot.main(Boot.java:166) 
Caused by: java.lang.ExceptionInInitializerError 
    at com.ziroby.clojure.App.main(App.java:14) 
    ... 6 more 
Caused by: java.lang.NullPointerException 
    at clojure.lang.RT.lastModified(RT.java:374) 
    at clojure.lang.RT.load(RT.java:408) 
    at clojure.lang.RT.load(RT.java:398) 
    at clojure.lang.RT.doInit(RT.java:434) 
    at clojure.lang.RT.<clinit>(RT.java:316) 
... 7 more 

Когда я смотрю на линии, которая вызывает его, он, кажется, пытается получить информацию банки для относительные файлы классы:

return ((JarURLConnection) url.openConnection()).getJarFile() 
      .getEntry(libfile).getTime(); 

Я думаю, что это означает, что он пытается получить информацию банки для внедренной банки, который на самом деле не существует в файловой системе. Он смотрит на это, чтобы увидеть, нужно ли перекомпилировать файл (например, common/core.clj).

Я что-то не так? Есть ли другой способ создать исполняемый банку (с зависимостями), не запутывая Clojure?

+0

Wow! Я могу увидеть как минимум 5 вещей, которые могут быть неудачными в этом кодексе. Это ваш код или другой API? Кстати, обычное решение (в отличие от одной банки) заключается в том, чтобы либо развернуть все банки, используя [JWS] (http://stackoverflow.com/tags/java-web-start/info), либо добавить манифест, который ссылается на зависимые Jars по относительным ссылкам, затем упакуйте их в установщик какой-либо формы. –

ответ

2

Я пришел к выводу, что это ошибка в Clojure. Я могу добавить одну нулевую проверку (непосредственно перед вызовом .getTime()), и она работает правильно. Я ввел ошибку в Jira Clojure: http://dev.clojure.org/jira/browse/CLJ-971

Смежные вопросы