制作一个可以破坏Clojure字符串的可执行jar

时间:2011-10-14 05:35:53

标签: java maven-2 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?

1 个答案:

答案 0 :(得分:2)

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