Как редактировать velocimacro без перезапуска скорости? - PullRequest
6 голосов
/ 06 апреля 2011

Мои макросы скорости кэшируются, и я не хочу, чтобы они были ... по крайней мере, во время разработки.

Я установил следующие свойства в моем файле свойств ...

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

... но, похоже, это не сработало

Используя свойства скорости, как я могу настроить скорость, чтобы не кэшировать макросы?

(я использую скорость 1.6.4)

EDIT:

Я не думаю, что линия ...

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

... относится к скорости

Ответы [ 5 ]

8 голосов
/ 05 сентября 2011

У меня была такая же проблема с NVelocity (порт скорости C #).Покопавшись в их источниках, я обнаружил, что повторная загрузка макросов в глобальном пространстве имен контролируется следующим свойством:

properties.SetProperty(RuntimeConstants.VM_PERM_ALLOW_INLINE_REPLACE_GLOBAL, true);

Я не проверял это со скоростью, но смотрел на их документация свойство существует и, кажется, делает именно то, что вам нужно.

2 голосов
/ 09 октября 2011

Похоже, вы не можете делать то, что вы хотите.Единственный способ получить определения макросов для перезагрузки - это поместить их в свой собственный библиотечный файл и установить velocimacro.library.autoreload = true.

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

velocimacro.library = VM_global_library.vm

Многозначный ключ.Примет CSV для значения.Имя файла (ов) библиотеки Velocimacro для загрузки при запуске движка Velocity Runtime.Эти Velocimacros доступны для всех шаблонов.Предполагается, что файл указан относительно корня пути ресурса загрузчика файлов.


velocimacro.library.autoreload = false

Управляет автозагрузкой библиотеки Velocimacro.При значении true исходная библиотека Velocimacro для вызванного Velocimacro будет проверяться на наличие изменений и при необходимости перезагружаться.Это позволяет вам изменять и тестировать библиотеки Velocimacro без необходимости перезапускать ваше приложение или контейнер сервлетов, как вы можете это делать с обычными шаблонами.Этот режим работает только при отключенном кэшировании в загрузчиках ресурсов (например, file.resource.loader.cache = false).Эта функция предназначена для разработки, а не для производства.

1 голос
/ 31 января 2012

Я не уверен, что это возможно, если макросы находятся не в библиотеке скоростей, а просто в каком-то файле шаблона.

Однако, в этом случае, если вы просто хотите упростить разработку, вы можетепросто переименуйте макрос (выполнив поиск / замену всего и просто добавив число в конец или что-то в этом роде).Тогда вы сможете сразу увидеть изменения.Вы просто должны помнить, чтобы переименовать его обратно к тому, что должно быть, когда вы закончите!

0 голосов
/ 08 июля 2019

Вы можете использовать директиву #define вместо #macro. Эти ссылки могут измениться. С его помощью вы также можете назвать блок кода VTL и назвать его, сколько раз вам это нужно. Определите аргументы макроса как переменные в том же контексте и используйте их внутри именованного блока, как если бы это был макрос. Оба могут решать общие ситуации; но они не эквивалентны. https://velocity.apache.org/engine/1.7/user-guide.html#define

0 голосов
/ 06 апреля 2011

Возможно, вам потребуется установить

file.resource.loader.modificationCheckInterval 

Указывает скорость, как часто нужно проверять, не изменился ли файл. Я не могу сказать из документов, что по умолчанию, но мы установили наш 2 в нашем dev env. Может случиться так, что значением по умолчанию для этого пропеллера является большое число или меньше 0, что по сути выключено, что означает, что он никогда не будет проверять изменения в вашем файле макроса.

...