<!--
  ~ 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.
  -->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Continuum</title>

  <link rel="stylesheet" type="text/css" href="continuum_files/tigris.css" media="screen">
  <link rel="stylesheet" type="text/css" href="continuum_files/print.css" media="print">

  <script src="continuum_files/tigris.js" type="text/javascript"></script></head>

<body onload="focus()" class="composite">

<div id="banner">
  <table border="1" cellpadding="8" cellspacing="0" width="100%">
    <tbody><tr>
      <td>
        <a href="http://www.apache.org/">
          Your company logo here
        </a>
      </td>
      <td>
        <a href="http://maven.apache.org/continuum">
          <img src="continuum_files/continuum_logo_75.gif" alt="Continuum" align="right" border="0">
        </a>
      </td>
    </tr>
    </tbody></table>
</div>

<div id="breadcrumbs">
  <div style="float: right">
    <a href="http://maven.apache.org/continuum">Continuum</a> |
    <a href="http://maven.apache.org/">Maven</a> |
    <a href="http://www.apache.org/">Apache</a>
  </div>

  <div>
    Welcome, <b>Guest</b> | <a href="login.html">Login</a>
  </div>
</div>

<table id="main" border="0" cellpadding="4" cellspacing="0" width="100%">
<tbody><tr valign="top">
<td id="leftcol" width="30%">
  <div id="navcolum">
    <div id="projectmenu" class="toolgroup">
      <div class="label">Continuum</div>

      <div class="body">
        <div><a href="index.html">Show Projects</a></div>

        <div><a href="schedule.html">View Build Schedule</a></div>
      </div>
    </div>

    <div id="projecttools" class="toolgroup">
      <div class="label">Add Project</div>

      <div class="body">
        <div><a href="addMaven2Project.html">Maven 2.0+ Project</a></div>

        <div><a href="addMaven1Project.html">Maven 1.x Project</a></div>

        <div><a href="addAntProject.html">Ant Project</a></div>

        <div><a href="addShellProject.html">Shell Project</a></div>
      </div>
    </div>

    <div id="projectimport" class="toolgroup">
      <div class="label">Import Project</div>

      <div class="body">
        <div>
          <a href="addCruiseControlProject.html">CruiseControl</a>
        </div>
      </div>
    </div>

    <div style="margin-top: 5em; color: #555; border: 1px dashed black; padding: 1em;">
      <p>Notes:</p>
      <ul>
        <li></li>
      </ul>
    </div>
  </div>
</td>
<td>
<div id="bodycol">
<div class="app">

<div>
  <p style="border-top: 1px solid transparent; border-bottom: 1px solid black;">
    <b style="border: 1px solid black; padding-left: 1em; padding-right: 1em;"><a href="groupStatus.html">Status</a></b>
    <b style="border: 1px solid black; padding-left: 1em; padding-right: 1em;"><a href="manageGroup.html">Manage</a></b>
  </p>
</div>

<div id="axial" class="h3">
<h3>Continuum Project Group</h3>

    <h4><a href="viewGroup.html">Plexus</a></h4>
    <table id="projectSummaryTable" border="1" cellpadding="3" cellspacing="2" width="100%">

      <!-- i18n -->
      <tbody><tr>
        <th>&nbsp;</th>
        <th width="100%">Name</th>
        <th>Version</th>
        <th>Build</th>
        <th colspan="5"></th>
      </tr>


        <tr class="b">
          <td><img src="continuum_files/icon_warning_sml.gif" alt="Error"></td>
          <td><a href="viewProject.html">Default Plexus Container</a></td>
          <td>1.0-alpha-6-SNAPSHOT</td>
          <td><a href="viewBuild.html">5</a></td>

          <td><a href="#">Build&nbsp;Now</a></td>
          <td><a href="builds.html">Build&nbsp;History</a></td>
          <td><a href="workingCopy.html">Working&nbsp;Copy</a></td>
          <td>Release</td>
          <td><a href="deleteProject.html">Delete</a></td>
        </tr>

        <tr class="b">
          <td>&nbsp;</td>
          <td><a href="viewProject.html">Plexus Utils</a></td>
          <td>1.0.2-SNAPSHOT</td>
          <td><strong>In&nbsp;progress</strong></td>
          
          <td><a href="#">Cancel&nbsp;Build</a></td>
          <td><a href="builds.html">Build&nbsp;History</a></td>
          <td><a href="workingCopy.html">Working&nbsp;Copy</a></td>
          <td>Release</td>
          <td><a href="deleteProject.html">Delete</a></td>
        </tr>

        <tr class="a">
          <td><img src="continuum_files/icon_success_sml.gif" alt="Success"></td>
          <td><a href="viewProject.html">Plexus Action</a></td>
          <td>1.0-alpha-6-SNAPSHOT</td>
          <td><a href="viewBuild.html">2</a></td>
          
          <td><a href="#">Build&nbsp;Now</a></td>
          <td><a href="builds.html">Build&nbsp;History</a></td>
          <td><a href="workingCopy.html">Working&nbsp;Copy</a></td>
          <td><a href="releaseProject.html">Release</a></td>
          <td><a href="deleteProject.html">Delete</a></td>
        </tr>

      </tbody></table>

    <div class="functnbar3">
      <form method="post" action="#">
        <img src="continuum_files/icon_success_sml.gif" alt="Success"> 0
        <img src="continuum_files/icon_error_sml.gif" alt="Failed"> 0
        <img src="continuum_files/icon_warning_sml.gif" alt="Error"> 2
        <input name="action" value="cam" type="hidden">
        <input name="cid" value="buildAllProjects" type="hidden">
        <input name="build-broken" value="Build All In Error" type="submit">
        <input name="build-all" value="Build All" type="submit">
      </form>
    </div>


</div>
</div>
</td>
</tr>
</tbody></table>

<div id="footer">
  <table border="0" cellpadding="4" cellspacing="0">
    <tbody><tr>
      <td>
        Continuum &#169; 2005 Apache Software Foundation
      </td>
    </tr>
    </tbody></table>
</div>

</body></html>
