如何在不重新启动速度的情况下编辑velocimacro?

我的速度宏正在被缓存,我不希望它们……至少在开发期间不是这样。

我在属性文件中设置了以下属性…

velocimacro.library.autoreload=true file.resource.loader.cache=false velocity.engine.resource.manager.cache.enabled=false 

……但这似乎并没有成功

使用速度属性,如何配置速度以不缓存宏?

(我使用的是速度1.6.4)

编辑:

我不认为这条线……

 velocity.engine.resource.manager.cache.enabled=false 

……与速度有关

我对NVelocity(C#端口速度)一直有同样的问题。 挖掘他们的源,我发现在全局名称空间中重新加载宏是由以下属性控制的。

 properties.SetProperty(RuntimeConstants.VM_PERM_ALLOW_INLINE_REPLACE_GLOBAL, true); 

我没有用速度测试这个,但是查看他们的文档,该属性存在并且似乎完全符合您的需要。

看起来你不能做你想要的。 我可以让宏定义重新加载的唯一方法是将它们放在自己的库文件中并设置velocimacro.library.autoreload = true。

来自http://velocity.apache.org/engine/devel/developer-guide.html

velocimacro.library = VM_global_library.vm

多值密钥。 将接受CSV作为值。 Velocity Runtime引擎启动时要加载的Velocimacro库的文件名。 这些Velocimacros可以访问所有模板。 假定该文件相对于文件加载器资源路径的根。


velocimacro.library.autoreload = false

控制Velocimacro库自动加载。 设置为true时,将检查调用的Velocimacro的源Velocimacro库是否有更改,并在必要时重新加载。 这使您可以更改和测试Velocimacro库,而无需重新启动应用程序或servlet容器,就像使用常规模板一样。 此模式仅在资源加载器中关闭缓存时有效(例如file.resource.loader.cache = false)。 此function旨在用于开发,而不用于生产。

如果宏不在速度库中并且只在某个模板文件中,我不确定这是可能的。

但是,在这种情况下,如果您只是想让开发更容易,您可以重命名宏(通过执行查找/替换所有,只需在末尾添加数字或其他内容)。 然后你应该能够立即看到变化。 您只需记住将其重命名为完成时应该重命名的内容!

您可能需要设置

 file.resource.loader.modificationCheckInterval 

这告诉了速度检查文件是否已更改的频率。 我无法从文档中看出默认值是什么,但我们在开发环境中设置为2。 可能只是这个prop的默认值是一个高数字或小于0,它本质上是关闭的,这意味着它永远不会检查宏文件中的更改。