<!--
Copyright 2004 The Apache Software Foundation.
Licensed  under the  Apache License,  Version 2.0  (the "License");
you may not use  this file  except in  compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed  under the  License is distributed on an "AS IS" BASIS,
WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
implied.

See the License for the specific language governing permissions and
limitations under the License.
-->
<mojo xmlns="marmalade:mojo">
  <metadata>
    <goal>hello</goal>
    <description>Say Hello to the World.</description>
    <parameters>
      <parameter>
        <name>salutation</name>
        <expression>#project.build.directory</expression>
        <description>Description of what this parameter is used for.</description>
      </parameter>
    </parameters>
  </metadata>
  <execute>
    <c:out xmlns:c="marmalade:core">Hello, World</c:out>
  </execute>
</mojo>

