制作一个可执行的jar来计算Clojure字符串



我正在构建一个加载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?

我已经得出结论,这是Clojure中的一个bug。我能够添加单个空检查(就在.getTime()调用之前),并且它正常工作。我在Clojure的Jira中输入了一个bug: http://dev.clojure.org/jira/browse/CLJ-971

最新更新