<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you 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.
	   
-->
<project name="Mojo">
   <bannerLeft>
      <name>Mojo</name>
      <src>/images/mojo_logo.png</src>
      <href>http://mojo.codehaus.org</href>
   </bannerLeft>
   <bannerRight>
      <name>Codehaus</name>
      <src>http://mojo.codehaus.org/images/codehaus-small.png</src>
      <href>http://www.codehaus.org</href>
   </bannerRight>
   <body>
      <links>
         <item name="Mojo" href="http://mojo.codehaus.org"/>
         <item name="Maven" href="http://maven.apache.org/maven2"/>
      </links>
      <menu name="Mojo">
         <item name="mojo" href="http://mojo.codehaus.org"/>
      </menu>
      ${reports}
   </body>
</project>
