<?xml version="1.0"?>
<!-- 
/*
 * Copyright 2001-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.
 */
 -->

<document>

 <properties>
  <title>How To Build Turbine</title>
 </properties>

<body>

<section name="How to build Turbine">

<p>
  Turbine is built using the <a href="http://maven.apache.org/">Maven</a> build
  tool.  So to get started you should download and install Maven.
</p>

<p>
  There are three major components to the core Turbine codebase.  They are the Turbine
  server itself, a Maven plugin to make working Turbine easier, and an implementation
  of the Schedule and Security services that uses Torque to generate object mapping classes
  for the database backend.
</p>

<p>
  To build these three projects, from the Turbine home directory just run 'maven' and by 
  default each of these projects will be compiled, test cases run, and jar files created.
  This will also install the artifacts into your local Maven repository as well.
</p>
<p>
  To build the site documentation, run <code>maven multiproject:site</code>, and this will build
  the site documenation for all the projects, and aggregate them together.
</p>

</section>



<section name="Extension Details">
	
<subsection name="Maven Plugin for Turbine">
<p>
  You can then go into your local repostory and take the jar file called <code>maven-turbine-plugin-XX.jar</code>
  and place it in your maven plugins directory.  Make sure to delete any existing onces.  Then run <code>maven -g</code>
  and you will see the turbine goals.  For more information see the <a href="maven-turbine-plugin/index.html">site docs</a> for the Maven plugin.
</p>
</subsection>

<subsection name="Torque Impl">
<p>
  The Torque implementations for the Schedule and Security services where broken out into seperate Maven
  projects in the Extensions directory because they require a codegeneration step before compiling the 
  source code.  Additioanlly, these services should implement an API defined by the main services Interface.
  This way, over time, other backend implementations of the Schedule and Security services can be added.
</p>
</subsection>
</section>
</body>
</document>
