Lucene Build Instructions

Basic steps:
  0) Install JDK 1.8 (or greater), Ant 1.8.2+, Ivy 2.2.0
  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.8 or greater,
Ant 1.8.2+, Ivy 2.2.0)

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

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

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

Finally, you'll need to install ivy into your ant lib folder
(~/.ant/lib). You can get it from http://ant.apache.org/ivy/.
If you skip this step, the Lucene build system will offer to do it 
for you.

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) 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.

If you want to build the documentation, type "ant documentation".

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/core/discussion.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.
