Velocity
  1. Velocity
  2. VELOCITY-448

Can't define macro in separate file and use it in another file.

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Duplicate
    • Affects Version/s: None
    • Fix Version/s: 1.6
    • Component/s: None
    • Labels:
      None
    • Environment:
      WindowsXP

      Description

      I my first file called "myDefinition.vm" , I difined a trivial macro
      #macro ( myMycro $p1 $p2)
      $p1 $p2
      #end

      In my second file, I parse and call my macro:

      #parse( myDefinition.vm")
      #myMacro( "apple" "orange)

      The result is always a single line:

      #myMacro( "apple" "orange)

      Velocity does not recognize the definition of my macro. I tried putting the macro is the same file and that works. But when the definition from another file does not seem to work.

        Issue Links

          Activity

          Hide
          Will Glass-Husain added a comment -

          As discussed on the dev list, I see this as an important "todo" for 1.6. I've reopened Velocity-362 as a reminder of this.

          Show
          Will Glass-Husain added a comment - As discussed on the dev list, I see this as an important "todo" for 1.6. I've reopened Velocity-362 as a reminder of this.
          Hide
          Henning Schmiedehausen added a comment -

          Velocity is not a Macro Processor period.

          What you want to achieve is done not by loading the Macro files through #parse() but by defining them in the velocity.properties. You add velocimacro.library properties to your config file and off you go. You don't even have to parse/include the macro files in your templates anymore.

          Macros are no tag libraries. Velocity is not JSP. Velocity Templates are not Java Server Pages. Don't try to transfer these concepts to Velocity. They don't fit most of the times. Not because one this is better or worse. But because Velocity is not JSP.

          Nathan pointed you at this. Please read and understand the difference beween the run-time and the parse-time of a template.

          As Will wrote, this is something that we should improve on. It is not trivial though and we must be careful not to break older pages that rely on that behaviour.

          Show
          Henning Schmiedehausen added a comment - Velocity is not a Macro Processor period. What you want to achieve is done not by loading the Macro files through #parse() but by defining them in the velocity.properties. You add velocimacro.library properties to your config file and off you go. You don't even have to parse/include the macro files in your templates anymore. Macros are no tag libraries. Velocity is not JSP. Velocity Templates are not Java Server Pages. Don't try to transfer these concepts to Velocity. They don't fit most of the times. Not because one this is better or worse. But because Velocity is not JSP. Nathan pointed you at this. Please read and understand the difference beween the run-time and the parse-time of a template. As Will wrote, this is something that we should improve on. It is not trivial though and we must be careful not to break older pages that rely on that behaviour.
          Hide
          Colbert Philippe added a comment -

          Without the capability to define macros in many separate files, one can't build modular systems with Velocity. In short Velocity is not yet an macro processor that is scalable and can be used in a big software projects.

          Show
          Colbert Philippe added a comment - Without the capability to define macros in many separate files, one can't build modular systems with Velocity. In short Velocity is not yet an macro processor that is scalable and can be used in a big software projects.
          Hide
          Will Glass-Husain added a comment -

          yes, we need to address this, though its not trivial. see this note:

          http://wiki.apache.org/jakarta-velocity/MacroIssues

          Show
          Will Glass-Husain added a comment - yes, we need to address this, though its not trivial. see this note: http://wiki.apache.org/jakarta-velocity/MacroIssues
          Hide
          Nathan Bubna added a comment -

          Also, please note that this is documented behavior. Note the Velocimacro Triva section under: http://jakarta.apache.org/velocity/docs/user-guide.html#Velocimacros

          Show
          Nathan Bubna added a comment - Also, please note that this is documented behavior. Note the Velocimacro Triva section under: http://jakarta.apache.org/velocity/docs/user-guide.html#Velocimacros

            People

            • Assignee:
              Unassigned
              Reporter:
              Colbert Philippe
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development