我在Tomcat上運行現有的Java Web應用程序重新加載Clojure的代碼到我加入一些原始的Clojure支持。目前,我只是將Clojure源文件作爲資源包含在classpath中,並通過clojure.lang.RT
調用它。這是原始的,但工作正常。在Tomcat中
但是,我注意到Tomcat的WebappClassLoader
緩存通過getResourceAsInputStream()
檢索到的資源,Clojure用它來檢索和編譯源代碼。也就是說,儘管(require 'my-ns :reload)
只是更新了文件的緩存版本,但即使磁盤上有更新的版本。有沒有辦法規避或避免Clojure文件的緩存?
最好的我已經拿出了很多沒結果的谷歌搜索後使用反射手動刪除WebappClassLoader.resourceEntries
這是可怕的條目。
我必須缺少一些東西。
答案,如「使用碼頭/ Glassfish的/ JBoss的」,「重新啓動Tomcat」等是不是我要找的。
謝謝Chas。我必須考慮一下。把東西放在'lib'中並不方便。我想知道'* use-context-classloader *'會不會影響其他內容。 –
@DaveRay'* use-context-classloader *'默認爲true。將其設置爲false會導致加載路徑通過加載Clojure本身的ClassLoader - 如果將Clojure從webapp加載或者導致破壞(即將clojure.jar放入$ CATALINA_HOME/lib中) '但嘗試從webapp加載代碼)。 問:爲什麼不從Web應用程序啓動REPL服務器,連接到它,並以這種方式加載代碼? – cemerick
謝謝。也許我只是沒有足夠的創造力,我會如何使用REPL服務器:)說我有一堆代碼在磁盤上的幾個文件。我啓動了運行repl服務器的Tomcat,如何在那裏獲取所有代碼? –