2011-10-14 25 views
3

我正在構建一個加載Clojure文件的Java應用程序。我無法制作一個可執行的jar文件。我使用的是單罐,但我得到一個例外,當我嘗試運行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(); 

我認爲這意味着它試圖獲取一個嵌入式jar的jar信息,它實際上並不存在於文件系統中。它正在研究是否需要重新編譯一個文件(如common/core.clj)。

我做錯了什麼?有沒有其他的方式來創建一個可執行的jar(與依賴)而不會混淆Clojure?

+0

哇!我可以看到至少5件可能在單個代碼語句中失敗的東西。它是你的代碼還是其他API?順便說一句,通常的解決方案(與單個jar相反)是使用[JWS](http://stackoverflow.com/tags/java-web-start/info)部署所有的Jars,或者添加一個清單來引用依賴相對引用的Jars,然後將它們打包成某種形式的安裝程序。 –

回答

2

我得出的結論是,這是Clojure中的一個錯誤。我可以添加一個空的檢查(就在.getTime()調用之前),並且它可以正常工作。我已經在Clojure的Jira中輸入了一個bug:http://dev.clojure.org/jira/browse/CLJ-971