我的速度宏正在被缓存,我不希望它们......至少在开发期间不会。
我在属性文件中设置了以下属性...
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
...与速度有关
答案 0 :(得分:8)
我对NVelocity(速度的C#端口)一直有同样的问题。通过他们的搜索,我发现在全局名称空间中重新加载宏是由以下属性控制的。
properties.SetProperty(RuntimeConstants.VM_PERM_ALLOW_INLINE_REPLACE_GLOBAL, true);
我没有用速度对此进行测试,但看着他们的documentation属性存在并且似乎完全符合您的需要。
答案 1 :(得分:2)
看起来你无法做你想做的事。我可以让宏定义重新加载的唯一方法是将它们放在自己的库文件中并设置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)。此功能仅用于开发,而不用于生产。
答案 2 :(得分:1)
如果宏不在速度库中,只是在某个模板文件中,我不确定这是可能的。
然而,在这种情况下,如果你只是想让开发更容易,你可以只重命名宏(通过查找/替换所有,只是在末尾添加一个数字或其他东西)。然后你应该能够立即看到变化。你只需要记住将它重命名为你完成后应该重新命名的内容!
答案 3 :(得分:0)
您可能需要设置
file.resource.loader.modificationCheckInterval
这告诉了速度检查文件是否已更改的频率。我无法从文档中看出默认值是什么,但我们在开发环境中设置为2。可能只是这个prop的默认值是一个高数字或小于0,它基本上是关闭的,这意味着它永远不会检查宏文件中的更改。
答案 4 :(得分:0)
您可能要使用#define指令而不是#macro。这些参考可以更改。 使用它,您还可以命名一个VTL代码块,并调用它几次。 将宏参数定义为同一上下文中的变量,并在命名块中使用它们,就好像它是宏一样。 两者都可以解决常见情况;但它们并不等同。 https://velocity.apache.org/engine/1.7/user-guide.html#define