Я создаю приложение Java, которое загружает файлы Clojure. У меня проблемы с созданием одной исполняемой банки. Я использую One-Jar, но я получаю исключение при попытке запустить файл jar:
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
Когда я смотрю на строку, которая ее вызывает, кажется, что она пытается получить информацию о jar для файлов относительного класса:
return ((JarURLConnection) url.openConnection()).getJarFile()
.getEntry(libfile).getTime();
Я думаю, это означает, что он пытается получить информацию о jar для встроенного jar, которого фактически нет в файловой системе. Он смотрит на это, чтобы увидеть, нужно ли перекомпилировать файл (например, common/core.clj
).
Я что-то не так делаю? Есть ли какой-то другой способ создать исполняемый файл jar (с зависимостями), не путая Clojure?