我有一个在Tomcat中运行的现有Java Web应用程序,我正在添加一些基本的Clojure支持。目前,我只是将Clojure源文件作为类路径上的资源包含进来,并通过
然而,我注意到Tomcat的
经过反复搜索,我想到的最好的办法就是使用反射手动从
我一定是错过了什么。不希望得到像“使用Jetty/Glassfish/JBoss”、“重新启动Tomcat”等答案。
clojure.lang.RT
调用它。它很原始,但是工作得很好。然而,我注意到Tomcat的
WebappClassLoader
会缓存通过getResourceAsInputStream()
检索到的资源,而Clojure使用这个方法检索和编译源代码。也就是说,进行 (require 'my-ns :reload)
重载时仍然会缓存版本,即使更新后的文件已经在磁盘上可用。有没有办法规避或避免缓存Clojure文件?经过反复搜索,我想到的最好的办法就是使用反射手动从
WebappClassLoader.resourceEntries
中删除条目,这很糟糕。我一定是错过了什么。不希望得到像“使用Jetty/Glassfish/JBoss”、“重新启动Tomcat”等答案。
lib
里面并不是很方便。我想知道如果使用*use-context-classloader*
是否会有影响,而不会搞砸其他东西。 - Dave Ray*use-context-classloader*
默认为 true。将其设置为 false 将导致加载通过加载 Clojure 本身的 ClassLoader 路由,这将不会产生任何影响(如果从 Web 应用程序加载 Clojure),或者会导致破坏(即,如果您将 clojure.jar 放在$CATALINA_HOME/lib
中但尝试从 Web 应用程序中加载代码)。问:为什么不直接从 Web 应用程序启动 REPL 服务器,连接到它,并以这种方式自由地加载代码呢? - cemerick