blob: 32769dcad4b6d590868f243edb82b740b3abb117 [file] [log] [blame]
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You 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.
-->
<project name="solr" default="usage">
<description>Solr</description>
<target name="usage" description="Prints out instructions">
<echo message="Welcome to the Solr project!" />
<echo message="Use 'ant example' to create a runnable example configuration." />
<echo message="Use 'ant run-example' to create and run the example." />
<echo message="And for developers:"/>
<echo message="Use 'ant clean' to clean compiled files." />
<echo message="Use 'ant compile' to compile the source code." />
<echo message="Use 'ant dist' to build the project WAR and JAR files." />
<echo message="Use 'ant javadocs' to build javadocs under build/docs/api" />
<echo message="Use 'ant generate-maven-artifacts' to generate maven artifacts." />
<echo message="Use 'ant package' to generate zip, tgz for distribution." />
<echo message="Use 'ant luke' to start luke. see: http://luke.googlecode.com" />
<echo message="Use 'ant test' to run unit tests." />
</target>
<import file="common-build.xml"/>
<!-- ========================================================================= -->
<!-- ============================== USER TASKS =============================== -->
<!-- ========================================================================= -->
<target name="example" description="Creates a runnable example configuration."
depends="dist-contrib,dist-war">
<copy file="${dist}/${fullnamever}.war"
tofile="${example}/webapps/${ant.project.name}.war"/>
<jar destfile="${example}/exampledocs/post.jar"
basedir="${dest}/solr-core/classes/java"
includes="org/apache/solr/util/SimplePostTool*.class">
<manifest>
<attribute name="Main-Class" value="org.apache.solr.util.SimplePostTool"/>
</manifest>
</jar>
<delete includeemptydirs="true">
<fileset dir="${example}/work" includes="**/*"/>
</delete>
<echo>See ${example}/README.txt for how to run the Solr example configuration.</echo>
</target>
<target name="run-example" depends="example"
description="Run Solr interactively, via Jetty. -Dexample.debug=true to enable JVM debugger">
<property name="example.solr.home" location="example/solr"/>
<property name="example.data.dir" location="example/solr/data"/>
<property name="example.debug.suspend" value="n"/>
<property name="example.jetty.port" value="8983"/>
<condition property="example.jvm.line" value="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=${example.debug.suspend},address=5005">
<isset property="example.debug"/>
</condition>
<property name="example.jvm.line" value=""/>
<property name="example.heap.size" value="512M"/>
<java jar="${example}/start.jar" fork="true" dir="${example}" maxmemory="${example.heap.size}">
<jvmarg line="${example.jvm.line}"/>
<sysproperty key="solr.solr.home" file="${example.solr.home}"/>
<sysproperty key="solr.data.dir" file="${example.data.dir}"/>
<sysproperty key="jetty.port" value="${example.jetty.port}"/>
</java>
</target>
<!-- setup proxy for download tasks -->
<condition property="proxy.specified">
<or>
<isset property="proxy.host"/>
<isset property="proxy.port"/>
<isset property="proxy.user"/>
</or>
</condition>
<target name="proxy.setup" if="proxy.specified">
<setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}" proxyuser="${proxy.user}" proxypassword="${proxy.password}"/>
</target>
<target name="compile-xml-query-parser">
<ant dir="${common.dir}/contrib/xml-query-parser" target="compile-core" inheritAll="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
<property name="luke.version" value="1.0.1"/>
<available file="luke/luke-${luke.version}.jar" property="luke.jar.exists" />
<target name="luke-download" unless="luke.jar.exists" depends="proxy.setup,compile-xml-query-parser">
<mkdir dir="luke"/>
<get src="http://luke.googlecode.com/files/luke-${luke.version}.jar"
dest="luke/luke-${luke.version}.jar"/>
</target>
<path id="luke.classpath">
<pathelement location="${common.dir}/build/classes/java" />
<pathelement location="${common.dir}/build/contrib/xml-query-parser/classes/java" />
</path>
<target name="luke" depends="luke-download">
<java fork="true"
classname="org.getopt.luke.Luke"
logError="true"
failonerror="true">
<classpath>
<fileset dir="luke">
<include name="luke-${luke.version}.jar"/>
</fileset>
<path refid="classpath"/>
<path refid="luke.classpath"/>
<path refid="test.classpath"/>
</classpath>
</java>
</target>
<!-- ========================================================================= -->
<!-- ========================== BUILD/TEST TASKS ============================= -->
<!-- ========================================================================= -->
<target name="compile" description="Compile the source code."
depends="compile-core, compile-contrib"/>
<target name="test" description="Validate, then run core, solrj, and contrib unit tests."
depends="validate-solr, test-core, test-contrib"/>
<target name="test-core" description="Runs the core and solrj unit tests."
depends="test-solr-core, test-solrj"/>
<target name="compile-test" description="Compile unit tests."
depends="compile-solr-test-framework, compile-test-solr-core, compile-test-solrj, compile-test-contrib, test-jsp"/>
<target name="javadocs" description="Calls javadocs-all, javadocs-solrj, and javadocs-test-framework"
depends="javadocs-all,javadocs-solrj,javadocs-test-framework"/>
<target name="compile-core" depends="compile-solr-core" unless="solr.core.compiled"/>
<!-- Solr core targets -->
<target name="test-solr-core" description="Test solr core">
<ant dir="core" target="test" inheritAll="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
<!-- Solrj targets -->
<target name="test-solrj" description="Test java client">
<ant dir="solrj" target="test" inheritAll="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
<target name="javadocs-solrj">
<ant dir="solrj" target="javadocs" inheritAll="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
<!-- Solr contrib targets -->
<target name="test-contrib" description="Run contrib unit tests.">
<contrib-crawl target="test" failonerror="true"/>
</target>
<!-- test-framework targets -->
<target name="javadocs-test-framework">
<ant dir="test-framework" target="javadocs" inheritAll="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
<!-- Webapp targets -->
<target name="test-jsp">
<ant dir="webapp" target="test" inheritall="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
<!-- Clean targets -->
<target name="clean" description="Cleans compiled files and other temporary artifacts.">
<delete dir="build" />
<delete dir="dist" />
<delete dir="package" />
<delete dir="example/solr/lib" />
</target>
<target name="clean-dest"
description="Cleans out build/ but leaves build/docs/, dist/ and package/ alone. This allows us to run nightly and clover together in Hudson">
<delete includeemptydirs="true" >
<fileset dir="build">
<exclude name="docs/"/>
</fileset>
</delete>
</target>
<!-- Clover targets -->
<target name="clover" depends="clover.setup, clover.info"
description="Instrument the Unit tests using Clover. Requires a Clover license and clover.jar in the ANT classpath. To use, specify -Drun.clover=true on the command line."/>
<target name="clover.setup" if="clover.enabled">
<taskdef resource="cloverlib.xml"/>
<mkdir dir="${clover.db.dir}"/>
<clover-setup initString="${clover.db.dir}/lucene_coverage.db">
<fileset dir="core/src/java"/>
<fileset dir="solrj/src/java"/>
<fileset dir="contrib/analysis-extras/src/java"/>
<fileset dir="contrib/clustering/src/java"/>
<fileset dir="contrib/dataimporthandler/src/java"/>
<fileset dir="contrib/dataimporthandler-extras/src/java"/>
<fileset dir="contrib/extraction/src/java"/>
<fileset dir="contrib/uima/src/java"/>
<testsources dir="test-framework/src/java"/>
<testsources dir="core/src/test"/>
<testsources dir="solrj/src/test"/>
<testsources dir="contrib/analysis-extras/src/test" />
<testsources dir="contrib/clustering/src/test" />
<testsources dir="contrib/dataimporthandler/src/test" />
<testsources dir="contrib/dataimporthandler-extras/src/test" />
<testsources dir="contrib/extraction/src/test" />
<testsources dir="contrib/uima/src/test" />
</clover-setup>
</target>
<target name="clover.info" unless="clover.present">
<echo>
Clover not found. Code coverage reports disabled.
</echo>
</target>
<target name="clover.check">
<fail unless="clover.present">
##################################################################
Clover not found.
Please make sure clover.jar is in ANT_HOME/lib, or made available
to Ant using other mechanisms like -lib or CLASSPATH.
##################################################################
</fail>
</target>
<!-- Run after Junit tests. -->
<target name="generate-clover-reports" depends="clover.check, clover">
<mkdir dir="${clover.report.dir}"/>
<clover-report>
<current outfile="${clover.report.dir}/clover.xml"
title="${fullnamever}">
<format type="xml"/>
</current>
<current outfile="${clover.report.dir}" title="${fullnamever}">
<format type="html"/>
</current>
</clover-report>
</target>
<!-- ========================================================================= -->
<!-- ===================== DISTRIBUTION-RELATED TASKS ======================== -->
<!-- ========================================================================= -->
<target name="copy-to-stage">
<copy-to-stage-macro artifacts.dir="${package.dir}"/>
</target>
<target name="dist"
description="Creates the Solr distribution files."
depends="dist-solrj, dist-core, dist-test-framework, dist-contrib, dist-war" />
<target name="dist-test-framework" depends="init-dist"
description="Creates the Solr test-framework JAR.">
<ant dir="test-framework" target="dist" inheritall="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
<target name="dist-contrib" depends="init-dist"
description="Make the contribs ready for distribution">
<contrib-crawl target="dist" failonerror="true" />
</target>
<target name="dist-war"
description="Creates the Solr WAR Distribution file.">
<ant dir="webapp" target="dist" inheritall="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
<target name="prepare-release"
depends="clean, package, generate-maven-artifacts, sign-artifacts"/>
<!-- make a distribution -->
<target name="package" depends="package-src-tgz,create-package"/>
<!-- Makes a tarball from running "svn export" at the root level. -->
<!-- Copies NOTICE.txt and LICENSE.txt from solr/ to the root level. -->
<target name="package-src-tgz" depends="init-dist"
description="Packages the Solr Source Distribution">
<property name="source.package.file"
value="${package.dir}/${fullnamever}-src.tgz"/>
<delete file="${source.package.file}" failonerror="false" />
<svn-export-source source.dir=".."/>
<tar destfile="${source.package.file}" compression="gzip" longfile="gnu">
<tarfileset dir="${svn.export.dir}"
prefix="${fullnamever}"
excludes="example/**/*.sh example/**/bin/"/>
<tarfileset dir="${svn.export.dir}"
prefix="${fullnamever}"
filemode="755"
includes="example/**/*.sh example/**/bin/"/>
<tarfileset dir="${svn.export.dir}/solr" prefix="${fullnamever}"
includes="NOTICE.txt,LICENSE.txt"/>
</tar>
<make-checksums file="${source.package.file}"/>
</target>
<target name="package-local-src-tgz"
description="Packages the Solr and Lucene sources from the local working copy">
<mkdir dir="${common-solr.dir}/build"/>
<property name="source.package.file"
value="${common-solr.dir}/build/${fullnamever}-src.tgz"/>
<delete file="${source.package.file}" failonerror="false" />
<tar destfile="${source.package.file}" compression="gzip" longfile="gnu">
<tarfileset dir=".." prefix="${fullnamever}" includes="*.txt *.xml dev-tools/" />
<tarfileset dir="." prefix="${fullnamever}" includes="LICENSE.txt NOTICE.txt"/>
<tarfileset dir="." prefix="${fullnamever}/solr"
excludes="build ${package.dir}/** ${dist}/**
example/webapps/*.war example/exampledocs/post.jar
lib/README.committers.txt **/data/ **/logs/*
**/*.sh **/bin/ scripts/ site-src/build/
.idea/ **/*.iml **/pom.xml" />
<tarfileset dir="." prefix="${fullnamever}/solr"
includes="core/src/test-files/solr/lib/classes/empty-file-main-lib.txt" />
<tarfileset dir="." filemode="755" prefix="${fullnamever}/solr"
includes="**/*.sh **/bin/ scripts/"
excludes="build/**"/>
<tarfileset dir="../lucene" prefix="${fullnamever}/lucene">
<patternset refid="lucene.local.src.package.patterns"/>
</tarfileset>
</tar>
</target>
<target name="create-package"
description="Packages the Solr Binary Distribution"
depends="init-dist, dist, example, javadocs">
<mkdir dir="${dest}/${fullnamever}"/>
<delete includeemptydirs="true">
<fileset dir="${example}/work" includes="**/*"/>
<fileset dir="${dest}/${fullnamever}" includes="**/*"/>
</delete>
<delete file="${package.dir}/${fullnamever}.tgz" failonerror="false" />
<delete file="${package.dir}/${fullnamever}.zip" failonerror="false" />
<mkdir dir="${dest}/contrib-lucene-libs-to-package"/>
<delete dir="${dest}/contrib-lucene-libs-to-package" includes="**/*"/>
<contrib-crawl target="add-lucene-libs-to-package"/>
<tar destfile="${package.dir}/${fullnamever}.tgz" compression="gzip" longfile="gnu">
<tarfileset dir="."
prefix="${fullnamever}"
includes="LICENSE.txt NOTICE.txt CHANGES.txt README.txt example/**
client/README.txt client/ruby/solr-ruby/** contrib/**/lib/**
contrib/**/README.txt contrib/**/CHANGES.txt"
excludes="lib/README.committers.txt **/data/ **/logs/* **/classes/ **/*.sh
**/bin/ **/*.iml **/*.ipr **/*.iws **/pom.xml **/*pom.xml.template" />
<tarfileset dir="${dest}/contrib-lucene-libs-to-package"
prefix="${fullnamever}"
includes="**" />
<tarfileset dir="."
filemode="755"
prefix="${fullnamever}"
includes="example/**/*.sh example/**/bin/" />
<tarfileset dir="."
prefix="${fullnamever}"
includes="dist/*.jar dist/*.war dist/solrj-lib/*"
excludes="**/*.tgz **/*.zip **/*.md5 **/*src*.jar **/*docs*.jar" />
<tarfileset dir="${dest}/docs"
prefix="${fullnamever}/docs" />
</tar>
<make-checksums file="${package.dir}/${fullnamever}.tgz"/>
<untar compression="gzip" src="${package.dir}/${fullnamever}.tgz" dest="${dest}"/>
<!--
This is a list of text file patterns to convert to CRLF line-ending style.
Shell scripts and files included in shell scripts should not be converted.
NB: The line-ending conversion process will mangle non-UTF8-encoded files.
-->
<fixcrlf srcdir="${dest}/${fullnamever}"
encoding="UTF-8"
eol="crlf"
includes="**/*.alg **/*.cfg **/*.cgi **/*.cpp **/*.css **/*.csv **/*.dtd
**/*.erb **/*.fcgi **/.htaccess **/*.htm **/*.html **/*.incl
**/*.java **/*.javacc **/*.jflex **/*.jflex-macro **/*.jj
**/*.js **/*.json **/*.jsp **/*LICENSE **/package-list **/*.pl
**/*.pom **/*pom.xml.template **/*.properties **/*.py
**/*.rake **/Rakefile **/*.rb **/*.rbbi **/README* **/*.rhtml
**/*.rslp **/*.rxml **/*.script **/*.svg **/*.tsv **/*.txt
**/UPGRADING **/USAGE **/*.uxf **/*.vm **/*.xcat **/*.xml
**/*.xsl **/*.xslt **/*.yml"
excludes="**/stopwordsWrongEncoding.txt **/gb18030-example.xml"
/>
<zip destfile="${package.dir}/${fullnamever}.zip">
<zipfileset dir="${dest}/${fullnamever}"
prefix="${fullnamever}"
excludes="**/*.sh **/bin/ src/scripts/" />
<zipfileset dir="${dest}/${fullnamever}"
prefix="${fullnamever}"
includes="**/*.sh **/bin/ src/scripts/"
filemode="755" />
</zip>
<make-checksums file="${package.dir}/${fullnamever}.zip"/>
</target>
<target name="sign-artifacts">
<sign-artifacts-macro artifacts.dir="${package.dir}"/>
</target>
<target name="javadocs-dep">
<copy failonerror="false" todir="${dest}/docs">
<fileset dir="${common-solr.dir}/site" />
</copy>
</target>
<target name="javadocs-all" depends="prep-lucene-jars,javadocs-dep"
description="Generate javadoc for core, java client and contrib">
<sequential>
<mkdir dir="${dest}/docs/api"/>
<!-- TODO: optimize this, thats stupid here: -->
<subant target="contrib-jars-to-solr">
<fileset dir="contrib/analysis-extras" includes="build.xml"/>
</subant>
<path id="javadoc.classpath">
<path refid="classpath"/>
<fileset dir="${dest}/contrib">
<include name="**/lucene-libs/**/*.jar"/>
</fileset>
<fileset dir="contrib">
<include name="**/lib/**/*.jar"/>
<exclude name="**/analysis-extras/lib/**/*icu4j*.jar"/> <!-- extraction/lib/ has this one -->
</fileset>
<pathelement location="${dest}/solr-solrj/classes/java"/>
</path>
<invoke-javadoc destdir="${dest}/docs/api"
overview="core/src/java/overview.html">
<sources>
<packageset dir="core/src/java" />
<packageset dir="solrj/src/java" />
<packageset dir="contrib/analysis-extras/src/java"/>
<packageset dir="contrib/clustering/src/java"/>
<packageset dir="contrib/dataimporthandler/src/java"/>
<packageset dir="contrib/dataimporthandler-extras/src/java"/>
<packageset dir="contrib/extraction/src/java"/>
<packageset dir="contrib/uima/src/java"/>
<group title="Core" packages="org.apache.*" />
<group title="SolrJ" packages="org.apache.solr.common.*,org.apache.solr.client.solrj*" />
<group title="contrib: Clustering" packages="org.apache.solr.handler.clustering*" />
<group title="contrib: DataImportHandler" packages="org.apache.solr.handler.dataimport*" />
<group title="contrib: Solr Cell" packages="org.apache.solr.handler.extraction*" />
<group title="contrib: Solr UIMA" packages="org.apache.solr.uima*" />
</sources>
</invoke-javadoc>
</sequential>
</target>
<target name="generate-maven-artifacts">
<taskdef uri="antlib:org.apache.maven.artifact.ant"
resource="org/apache/maven/artifact/ant/antlib.xml"
classpathref="maven-ant-tasks.classpath" />
<sequential>
<ant target="get-maven-poms" dir=".." inheritall="false"/>
<m2-deploy pom.xml="pom.xml"/> <!-- Solr parent POM -->
<subant target="dist-maven" inheritall="false" >
<fileset dir="core" includes="build.xml"/>
<fileset dir="solrj" includes="build.xml"/>
<fileset dir="test-framework" includes="build.xml"/>
<fileset dir="webapp" includes="build.xml"/>
</subant>
<contrib-crawl target="dist-maven"/>
</sequential>
</target>
<!-- ========================================================================= -->
<!-- ========================= COMMITTERS' HELPERS =========================== -->
<!-- ========================================================================= -->
<target name="stub-factories" depends="dist-core,lucene-jars-to-solr"
description="Generates stub factories as needed">
<path id="stub.jars">
<!-- this needs to be a list of all jars that might contain
classes we want to build factories for
-->
<fileset dir="${lucene-libs}">
<include name="*.jar"/>
</fileset>
<fileset dir="${dist}">
<include name="*.jar"/>
<exclude name="*solrj*.jar"/>
</fileset>
</path>
<pathconvert property="jar.list" pathsep=" " refid="stub.jars" />
<path id="missing.factories.classpath">
<pathelement path="${common.dir}/contrib/queries/lib/jakarta-regexp-1.4.jar"/>
<path refid="test.classpath"/>
</path>
<property name="stub.list" value="${dest}/need-stub-factories.txt" />
<java fork="false"
classname="org.apache.solr.util.SuggestMissingFactories"
logError="true"
failonerror="true"
classpathref="missing.factories.classpath"
output="${stub.list}">
<arg line="${jar.list}" />
</java>
<fail unless="stub.src.path">...
This task requires that the property 'stub.src.path' be set.
It must contain a "path" listing directories containing source
files that this task should use when looking for classes that
need factories created, the format is platform specific --
typically it is colon seperated in Unix, semi-colon seperated
on windows, ie:
ant stub-factories -Dstub.src.path="core/src:../lucene/contrib:../lucene/src/java"
FYI: The file ${stub.list} contains a list of classes
that seem to need stub factories. (if java files can be found to
use as guides for creating them).
</fail>
<pathconvert pathsep=" " property="stub.src.dirs">
<path>
<pathelement path="${stub.src.path}"/>
</path>
</pathconvert>
<exec executable="perl"
dir="core/src/java/org/apache/solr/analysis/"
failonerror="true">
<arg value="${common-solr.dir}/dev-tools/stub-analysis-factory-maker.pl"/>
<redirector input="${stub.list}">
<!-- place to put special case classes we want to ignore -->
<inputfilterchain>
<linecontainsregexp negate="true">
<!-- only for internal Solr highlighting purposes -->
<regexp pattern="TokenOrderingFilter"/>
</linecontainsregexp>
<linecontainsregexp negate="true">
<!-- no way to leverage this in Solr -->
<regexp pattern="CachingTokenFilter"/>
</linecontainsregexp>
<linecontainsregexp negate="true">
<!-- no way to leverage this in Solr -->
<regexp pattern="HyphenationCompoundWordTokenFilter"/>
</linecontainsregexp>
<linecontainsregexp negate="true">
<!-- no way to leverage these in Solr (yet) -->
<regexp pattern="Sink|Tee"/>
</linecontainsregexp>
<linecontainsregexp negate="true">
<!-- Solr already has a different impl for this -->
<regexp pattern="SynonymTokenFilter"/>
</linecontainsregexp>
<linecontainsregexp negate="true">
<!-- solr and lucene both have one? ? ? ? -->
<regexp pattern="LengthFilter"/>
</linecontainsregexp>
<linecontainsregexp negate="true">
<!-- solr provides it's own SnowballPorterFilter variant -->
<regexp pattern="SnowballFilter"/>
</linecontainsregexp>
</inputfilterchain>
</redirector>
<arg line="${stub.src.dirs}"/>
</exec>
</target>
<target name="build-site" depends="svn-up"
description="Committers' Helper: build the site and copy to site/.">
<delete dir="site-src/build"/>
<exec executable="forrest" dir="site-src"/>
<copy todir="site">
<fileset dir="site-src/build/site"/>
</copy>
<antcall target="svn-up"/>
</target>
<target name="svn-up">
<exec executable="${svn.exe}">
<arg value="update"/>
</exec>
</target>
</project>