Lucene Build Instructions

$Id: BUILD.txt 168332 2005-05-05 13:38:34Z dnaber $

Basic steps:
  0) Install JDK 1.4 (or greater), Ant 1.6.2 (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.2 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.2 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/jakarta/lucene/

Download either a zip or a tarred/gzipped version of the archive, and
uncompress it into a directory of your choice.

Step 2) Connect to the top-level 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.

  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/bin

where this points to the bin directory of your javacc installation.

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.
