我正在构建一个加载Clojure文件的Java应用程序。我在制作一个可执行的jar时遇到了麻烦。我正在使用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信息,而这个jar实际上并不存在于文件系统中。它正在查看是否需要重新编译文件(如common/core.clj
)。
我做错了吗?有没有其他方法来创建一个可执行jar(带有依赖项)而不会混淆Clojure?
答案 0 :(得分:2)
我得出结论,这是Clojure中的一个错误。我可以添加一个空检查(就在.getTime()
调用之前),它可以正常工作。我在Clojure的Jira中输入了一个错误:http://dev.clojure.org/jira/browse/CLJ-971