<!--
  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>
    <publishDate position="navigation-bottom" format="yyyy-MM-dd"/>
    <poweredBy>
        <logo name="clerezza.org" href="http://www.clerezza.org/"
            img="http://wiki.clerezza.org/confluence/download/attachments/557073/logo.png"/>
    </poweredBy>
     
    <body>
        <menu ref="reports" inherit="bottom"/>
        <menu ref="modules" />
        <menu ref="parent" />
    </body>
    <skin>
        <groupId>org.apache.maven.skins</groupId>
        <artifactId>maven-default-skin</artifactId>
        <version>1.0</version>
    </skin>
</project>

