Apache Lucene
Copyright 2011 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

Includes lib/servlet-api-2.4.jar from  Apache Tomcat
Includes lib/ant-1.7.1.jar and lib/ant-junit-1.7.1.jar from Apache Ant
Includes contrib/queries/lib/jakarta-regexp-1.4.jar from Apache Jakarta Regexp

ICU4J, (under contrib/icu) is licensed under an MIT styles license
(contrib/icu/lib/ICU-LICENSE.txt) and Copyright (c) 1995-2008 
International Business Machines Corporation and others

Some data files (under contrib/icu/src/data) are derived from Unicode data such
as the Unicode Character Database. See http://unicode.org/copyright.html for more
details.

Brics Automaton (under src/java/org/apache/lucene/util/automaton) is 
BSD-licensed, created by Anders Møller. See http://www.brics.dk/automaton/

The levenshtein automata tables (under src/java/org/apache/lucene/util/automaton) were
automatically generated with the moman/finenight FSA library, created by
Jean-Philippe Barrette-LaPierre. This library is available under an MIT license,
see http://sites.google.com/site/rrettesite/moman and 
http://bitbucket.org/jpbarrette/moman/overview/

The class org.apache.lucene.SorterTemplate was inspired by CGLIB's class with
the same name. The implementation part is mainly done using pre-existing
Lucene sorting code. In-place stable mergesort was borrowed from CGLIB,
which is Apache-licensed.

The Google Code Prettify is Apache License 2.0.
See http://code.google.com/p/google-code-prettify/

JUnit (under lib/junit-4.7.jar) is licensed under the Common Public License v. 1.0
See http://junit.sourceforge.net/cpl-v10.html

JLine (under contrib/lucli/lib/jline.jar) is licensed under the BSD License.
See http://jline.sourceforge.net/

