<?xml version="1.0"?>
<!--
  Copyright 2002,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>Getting Started</title>
  <author email="jstrachan@apache.org">James Strachan</author>
 </properties>

<body>

<section name="Getting Started">


<p>
The easiest way to get started with Jelly is to try out the <a href="tutorial.html">tutorials</a>.    
Before you try out any of the tutorials, you'll need to install Maven first.
For more details on how to install Maven please refer to the 
<a href="http://maven.apache.org/">Maven documentation</a>
</p>

<p>
Here's a brief overview of what you need to do. 

<ul>
<li>
Download a binary distribution of Maven.
</li>
<li>
Set the environment variable MAVEN_HOME to point to where you installed Maven
</li>
<li>
Change your PATH environment variable so that it points to MAVEN_HOME/bin
</li>
<li>
Get a source distribution of Jelly. 
The easiest way to do this is (until we have nightly builds working) is to grab a CVS checkout.
Jelly currently resides in the jelly directory inside jakarta-commons.
There are instructions on performing CVS checkouts 
<a href="http://jakarta.apache.org/site/cvsindex.html">here</a>
</li>
</ul>
</p>

<p>
To verify that your Maven installation is working, change directory into your <i>jelly</i> directory 
which should contain a <i>project.xml</i> file required by Maven. Then type
</p>

<source>maven jar</source>

<p>
This should download all the required jars required to build and run the core jelly,
compile all the code and build and run the unit test cases. 
</p>

</section>

<section name="Tag-libraries">
<p> 
  Your next task is to choose the tag-libraries you are interested to and to
  build them. For all of them, you can build using <code>maven jar</code>.
  </p>
<p>
  Beware that some tag-libraries have dependencies that cannot be distributed
  by the maven repository distribution for license reasons. The tag-libraries
    <a href="libs/email/index.html">email</a>,
    <a href="libs/soap/index.html"></a>, and
    <a href="libs/jetty/index.html"></a>
  are known to require such.
  Please browse to their dependency-list in order to download the
  named jars, rename-them, and put them at the appropriate place
  in the maven repository. (you could also delete these directories)
  </p>
  <p>
    Once all dependencies are honoured, you can also build it all using
    <code>maven dist</code>, however, maven may become out of resources;
    changing the environment variable MAVEN_OPTS (e.g. to -Xmx768m...) might help.
    </p>
<p>
Once you've got this far, it might be time to try out one of the <a href="tutorial.html">tutorials</a>    
</p>
</section>


</body>

</document>