Lucene Build Instructions

$Id$

Basic steps:
  0) Install JDK 1.4 (or greater), Ant 1.6.3 (or greater)
  1) Download Lucene from Apache and unpack it
  2) Connect to the top-level of your Lucene installation
  3) Install JavaCC (optional)
  4) Run ant

Step 0) Set up your development environment (JDK 1.4 or greater,
Ant 1.6.3 or greater)

We'll assume that you know how to get and set up the JDK - if you
don't, then we suggest starting at http://java.sun.com and learning
more about Java, before returning to this README. Lucene runs with
JDK 1.4 and later.

Like many Open Source java projects, Lucene uses Apache Ant for build
control.  Specifically, you MUST use Ant version 1.6.3 or greater.

Ant is "kind of like make without make's wrinkles".  Ant is
implemented in java and uses XML-based configuration files.  You can
get it at:

  http://ant.apache.org

You'll need to download the Ant binary distribution.  Install it
according to the instructions at:

  http://ant.apache.org/manual

Step 1) Download Lucene from Apache

We'll assume you already did this, or you wouldn't be reading this
file.  However, you might have received this file by some alternate
route, or you might have an incomplete copy of the Lucene, so: Lucene
releases are available for download at:

  http://www.apache.org/dyn/closer.cgi/lucene/java/

Download either a zip or a tarred/gzipped version of the archive, and
uncompress it into a directory of your choice.

Step 2) From the command line, change (cd) into the top-level directory of your Lucene installation

Lucene's top-level directory contains the build.xml file. By default,
you do not need to change any of the settings in this file, but you do
need to run ant from this location so it knows where to find build.xml.

If you would like to change settings you can do so by creating one 
or more of the following files and placing your own property settings
in there:

    ~/lucene.build.properties
    ~/build.properties
    lucene-x.y/build.properties

The first property which is found in the order with which the files are
loaded becomes the property setting which is used by the Ant build
system.

NOTE: the ~ character represents your user account home directory.

Step 3) Install JavaCC

Building the Lucene distribution from the source does not require the JavaCC
parser generator, but if you wish to regenerate any of the pre-generated
parser pieces, you will need to install JavaCC. Version 4.1 is tested to
work correctly.

  http://javacc.dev.java.net

Follow the download links and download the zip file to a temporary
location on your file system.

After JavaCC is installed, create a build.properties file
(as in step 2), and add the line

  javacc.home=/javacc

where this points to the root directory of your javacc installation
(the directory that contains bin/lib/javacc.jar).

Step 4) Run ant

Assuming you have ant in your PATH and have set ANT_HOME to the
location of your ant installation, typing "ant" at the shell prompt
and command prompt should run ant.  Ant will by default look for the
"build.xml" file in your current directory, and compile Lucene.

To rebuild any of the JavaCC-based parsers, run "ant javacc".

For further information on Lucene, go to:
  http://lucene.apache.org/

Please join the Lucene-User mailing list by visiting this site:
  http://lucene.apache.org/java/docs/mailinglists.html

Please post suggestions, questions, corrections or additions to this
document to the lucene-user mailing list.

This file was originally written by Steven J. Owens <puff@darksleep.com>.
This file was modified by Jon S. Stevens <jon@latchkey.com>.

Copyright (c) 2001-2005 The Apache Software Foundation.  All rights reserved.
