Enabling Template Files and Velocimacros Resolution

Posted on by chmutov

As you probably know, there’s something special about developing applications with template languages (e.g. Velocity and Freemarker): lack of compile-time information prevents from resolving references to included files and library macros. But this is not a problem anymore — IntelliJ IDEA can help you with the use of specially crafted comments.

Let’s have a look at an example module: a.vm file includes b.vm file via velocity.properties file (i. e. relative paths contained in file.resource.loader.path property).

Press Alt+Enter on an unresolved file reference in a.vm and select a module-wide velocity.properties file declaration (looks most appropriate for a single file).

IntelliJ IDEA finds or creates an implicitly included file (any *.vm file that begins with #* @implicitly included *#) and inserts a @velocityproperties comment into it. Then you can select a velocity.properties file from a list of suitable ones found by IntelliJ IDEA.

The comment itself is quite simple:

#* @velocityproperties path=”<RELATIVE PATH TO VELOCITY PROPERTIES FILE>” runtime_root=”<RELATIVE PATH TO RUNTIME ROOT DIRECTORY>” *#
Base for these relative paths is a folder containing file with comment (in this case, velocity_implicit.vm).

Comments below can no longer be edited.

7 Responses to Enabling Template Files and Velocimacros Resolution

  1. Honza Novotný says:

    August 5, 2009

    I would prefer if those settings could be edited somewhere globally for entire module. Similar way the facets work.

    Moreover if I could, for example, define defaultly imported JSP tag libraries and macros (without explicit definition in templates) as Freemarker itself provides ability to have these defaultly available in all templates. Same way it supports default variables available in page context. This is feature utilized by some frameworks.

  2. Christopher Brown says:

    August 6, 2009

    Support for StringTemplate would be nice, and probably simpler than Velocity and Freemarker to add. It’s by the guy that created ANTLR…

  3. A. Adrian says:

    August 8, 2009

    > I would prefer if those settings could be edited somewhere globally for entire module. Similar way the facets work.
    +1. IMHO this is what facets are for.
    Polluting the template files with such “comments” is not a nice idea (it remembers me of the annotation abuse of some frameworks)

  4. Taras Tielkes says:

    August 10, 2009

    Christopher,

    Vote here for StringTemplate support:
    http://www.jetbrains.net/jira/browse/IDEA-24108

  5. Timothy says:

    April 15, 2015

    I am using both @vtlvariable and @vtlmacrolibrary. Is there some way to link a reference to a custom Velocity directive class?

    • Peter Gromov says:

      April 17, 2015

      Sorry, not yet.

      • Bram Biesbrouck says:

        May 5, 2015

        I second this request for custom directives support, would be very nice to have if you’ve working with Velocity.

Subscribe

Subscribe for updates