<html>
  <head>
    <meta content='text/html;charset=UTF-8' http-equiv='Content-Type'>
    <title>buildr &mdash; {{ page.title }}</title>
    <style type='text/css'>
      @import 'css/default.css';
      @import 'css/syntax.css';
    </style>
    <style media='print' type='text/css'>
      @import 'css/print.css';
    </style>
    <meta content='Official Buildr documentation from the people in the know' name='subject'>
    <link href='images/favicon.png' rel='shortcut icon'>
  </head>
  <body>
    <div id='wrap'>
      <div id='header'>
        <a href='http://buildr.apache.org/' title="Build like you code"><img alt='buildr' src='images/buildr.png'></a>
        <div class='tagline'>Build like you code</div>
      </div>
      <div id='pages'>
        <ol class='toc'>
          <li>Start Here
            <ol class="toc">
              <li><a href='index.html'>Welcome</a></li>
              <li><a href='quick_start.html'>Quick Start</a></li>
              <li><a href='installing.html'>Installing & Running</a></li>
              <li><a href='http://cwiki.apache.org/confluence/display/BUILDR/Index'>Community Wiki</a></li>
            </ol>
          </li>
          <li>Using Buildr
            <ol class="toc">
              <li><a href='buildr.pdf'>This Guide (PDF)</a></li>
              <li><a href='projects.html'>Projects</a></li>
              <li><a href='building.html'>Building</a></li>
              <li><a href='artifacts.html'>Artifacts</a></li>
              <li><a href='packaging.html'>Packaging</a></li>
              <li><a href='testing.html'>Testing</a></li>
              <li><a href='releasing.html'>Releasing</a></li>
              <li><a href='settings_profiles.html'>Settings/Profiles</a></li>
              <li><a href='languages.html'>Languages</a></li>
              <li><a href='more_stuff.html'>More Stuff</a></li>
              <li><a href='extending.html'>Extending Buildr</a></li>
              <li><a href='http://cwiki.apache.org/confluence/display/BUILDR/Buildr+HowTos'>How-Tos</a></li>
            </ol>
          </li>
          <li>Reference
            <ol class="toc">
              <li><a href='rdoc/Buildr.html'>API</a></li>
              <li><a href='https://github.com/ruby/rake'>Rake</a></li>
              <li><a href='https://rubygems.org/gems/Antwrap'>Antwrap</a></li>
              <li><a href='http://cwiki.apache.org/confluence/display/BUILDR/Common+Problems+and+Solutions'>Troubleshooting</a></li>
            </ol>
          </li>
          <li>Get Involved
            <ol class="toc">
              <li><a href='download.html'>Download</a></li>
              <li><a href='mailing_lists.html'>Mailing Lists</a></li>
              <li><a href='http://www.twitter.com/buildr'>Twitter</a></li>
              <li><a href='http://issues.apache.org/jira/browse/Buildr'>Issues/Bugs</a></li>
              <li><a href='https://builds.apache.org/view/A-F/view/Buildr'>CI Jobs</a></li>
              <li><a href='contributing.html'>Contributing</a></li>
            </ol>
          </li>
          <li>
            <form action='http://www.google.com/' onsubmit="document.getElementById('gQuery').value += ' site:buildr.apache.org'">
              <input name='q' size='20' type='text' id='gQuery'>
              <input name='sa' type='submit' value='Search'>
              <img alt='Google Custom Search' src='http://www.google.com/coop/images/google_custom_search_smnar.gif'>
            </form>
          </li>
        </ol>
      </div>
      <div id='content'>
        <h1 id='{{ page.title | downcase | replace(' ', '_') }}'>{{ page.title }}</h1>
        {{ content | toc }}
        {{ content }}
      </div>
      <div id='footer'>Copyright &copy; 2007-2020 The Apache Software Foundation</div>
    </div>
  </body>
</html>
