lucene/solr/build.xml

1163 lines
48 KiB
XML

<!-- Solr build file -->
<!--
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" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<property name="solr-path" value="." />
<import file="common-build.xml"/>
<!-- 3rd party libraries for compilation -->
<property name="lib" location="lib" />
<!-- solr source files -->
<property name="src" location="src" />
<property name="web.xml" location="${src}/webapp/web/WEB-INF/web.xml"/>
<!-- Destination for distribution files (demo WAR, contrib JARs, etc.) -->
<property name="dist" location="dist" />
<property name="clover.db.dir" location="${dest}/tests/clover/db"/>
<property name="clover.report.dir" location="${dest}/tests/clover/reports"/>
<available
property="clover.present"
classname="com.cenqua.clover.tasks.CloverReportTask"
/>
<condition property="clover.enabled">
<and>
<isset property="run.clover"/>
<isset property="clover.present"/>
</and>
</condition>
<!-- Default target: usage. Prints out instructions. -->
<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 javadoc' to build javadoc 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>
<!-- Clean: cleans compiled files and other temporary artifacts. -->
<target name="clean" depends="clean-contrib"
description="Cleans compiled files and other temporary artifacts.">
<delete dir="${dest}" />
<delete dir="${dist}" />
<delete dir="${package.dir}" />
<delete dir="example/solr/lib" />
<delete dir="${lucene-libs}" />
</target>
<target name="clean-dest"
description="Cleans out ${dest} but leaves ${dist} and ${package.dir} alone. This allows us to run nightly and clover together in Hudson">
<delete includeemptydirs="true" >
<fileset dir="${dest}">
<exclude name="docs/"/>
</fileset>
</delete>
</target>
<!-- Prepares an entity file for use in Forrest documentation -->
<target name="init-forrest-entities">
<!-- no description, don't advertise -->
<!-- Building off Lucene trunk, we don't need this
<available file="lib/lucene-core-${version}.jar"
property="lucene-version-ok-m2deploy-wont-fail" />
<fail unless="lucene-version-ok-m2deploy-wont-fail">
lib/lucene-core-${version}.jar Missing
lib/lucene-core-${version}.jar does not exist.
This will cause problems with m2-deploy later, so fail fast now.
Probably cause: lucene jars were upgraded w/o modifying the
'version' property in common-build.xml
</fail>
-->
<mkdir dir="${dest}" />
<!-- A folder containing the expanded war file -->
<mkdir dir="${dest}/web" />
<echo file="${dest}/solr-specific-forrest-variables.ent" append="false">
&lt;!ENTITY solr.specversion "${specversion}"&gt;
</echo>
</target>
<!-- ========================================================================= -->
<!-- ===================== COMPILATION-RELATED TASKS ========================= -->
<!-- ========================================================================= -->
<!-- The compilation classpath -->
<path id="compile.classpath">
<fileset dir="${lib}">
<include name="*.jar" />
</fileset>
<path refid="lucene.classpath"/>
</path>
<target name="compile-solrj"
description="Compile the java client."
depends="init-forrest-entities, compile-lucene">
<solr-javac destdir="${dest}/solrj"
classpathref="compile.classpath">
<src path="${src}/common" />
<src path="${src}/solrj" />
</solr-javac>
</target>
<!-- This depend on all of solr -->
<path id="compile.classpath.solrj">
<path refid="compile.classpath" />
<pathelement location="${dest}/solrj"/>
<!-- jetty -->
<fileset dir="example/lib">
<include name="**/*.jar" />
</fileset>
</path>
<!-- Compile the project. -->
<target name="compile"
description="Compile the source code."
depends="compile-solrj,init-forrest-entities">
<solr-javac destdir="${dest}/solr"
classpathref="compile.classpath.solrj">
<src path="${src}/java" />
<src path="${src}/webapp/src" />
</solr-javac>
</target>
<target name="javadoc-dep">
<copy failonerror="false" todir="${build.docs}">
<fileset dir="site" />
</copy>
</target>
<target name="javadoc-solrj" depends="compile-solrj,javadoc-dep" description="Generates solrj javadoc documentation.">
<sequential>
<mkdir dir="${build.javadoc}/solrj"/>
<path id="javadoc.classpath">
<path refid="compile.classpath"/>
</path>
<invoke-javadoc
destdir="${build.javadoc}/solrj"
title="${Name}-j ${version} API (${specversion})">
<sources>
<packageset dir="${src}/common"/>
<packageset dir="${src}/solrj"/>
</sources>
</invoke-javadoc>
</sequential>
</target>
<target name="javadoc-core" depends="compile,javadoc-dep" description="Generates javadoc documentation for core.">
<sequential>
<mkdir dir="${build.javadoc}/solr"/>
<path id="javadoc.classpath">
<path refid="compile.classpath"/>
<path refid="compile.classpath.solrj"/>
<pathelement location="${dest}/solrj"/>
</path>
<invoke-javadoc
destdir="${build.javadoc}/solr"
title="${Name} ${version} core API (${specversion})">
<sources>
<packageset dir="${src}/java" />
<packageset dir="${src}/webapp/src"/>
</sources>
</invoke-javadoc>
</sequential>
</target>
<target name="javadoc-all" depends="compile,javadoc-dep" description="Generate javadoc for core, client and contrib">
<sequential>
<mkdir dir="${build.javadoc}"/>
<path id="javadoc.classpath">
<path refid="compile.classpath"/>
<path refid="compile.classpath.solrj"/>
<fileset dir="contrib">
<include name="**/lib/**/*.jar"/>
</fileset>
<pathelement location="${dest}/client/solrj"/>
</path>
<invoke-javadoc destdir="${build.javadoc}">
<sources>
<packageset dir="${src}/common" />
<packageset dir="${src}/solrj" />
<packageset dir="${src}/java" />
<packageset dir="${src}/webapp/src" />
<packageset dir="contrib/dataimporthandler/src/main/java" />
<packageset dir="contrib/clustering/src/main/java" />
<packageset dir="contrib/extraction/src/main/java" />
<packageset dir="contrib/uima/src/main/java" />
<packageset dir="contrib/analysis-extras/src/java" />
<group title="Core" packages="org.apache.*" />
<group title="Common" packages="org.apache.solr.common.*" />
<group title="SolrJ" packages="org.apache.solr.client.solrj*" />
<group title="contrib: DataImportHandler" packages="org.apache.solr.handler.dataimport*" />
<group title="contrib: Clustering" packages="org.apache.solr.handler.clustering*" />
<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="javadoc-contrib" description="Generate javadoc for contrib classes" depends="build-contrib,javadoc-dep">
<contrib-crawl target="javadoc"
failonerror="true"/>
</target>
<target name="javadoc" depends="javadoc-core, javadoc-contrib, javadoc-solrj, javadoc-all">
</target>
<target name="stub-factories" depends="dist-jar"
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="${lib}">
<include name="lucene-*.jar"/>
</fileset>
<fileset dir="${dist}">
<include name="*.jar"/>
<exclude name="*solrj*.jar"/>
</fileset>
</path>
<pathconvert property="jar.list" pathsep=" " refid="stub.jars" />
<property name="stub.list" value="${dest}/need-stub-factories.txt" />
<java fork="false"
classname="org.apache.solr.util.SuggestMissingFactories"
logError="true"
failonerror="true"
classpathref="test.run.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="./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="${basedir}/src/dev-tools/stub-analysis-factory-maker.pl"
dir="src/java/org/apache/solr/analysis/"
failonerror="true">
<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>
<!-- ========================================================================= -->
<!-- ===================== TESTING-RELATED TASKS ============================= -->
<!-- ========================================================================= -->
<!-- Classpath for unit test compilation. -->
<!-- For now, it's the same as main classpath. Later it will have JUnit, Clover, etc. -->
<path id="test.compile.classpath">
<path refid="compile.classpath" />
<path refid="compile.classpath.solrj" />
<pathelement location="${dest}/solr"/>
<pathelement location="${dest}/solrj"/> <!-- include solrj -->
<pathelement location="${common-solr.dir}/../lucene/build/classes/test-framework" /> <!-- include some lucene test code -->
</path>
<path id="test.run.classpath">
<path refid="test.compile.classpath" />
<pathelement location="${dest}/tests"/>
<!-- include the solrj classpath and jetty files included in example -->
<path refid="compile.classpath.solrj" />
<pathelement location="${common-solr.dir}/../lucene/build/classes/test-framework" /> <!-- include some lucene test code -->
<pathelement path="${java.class.path}"/>
</path>
<!-- Compile unit tests. -->
<target name="compileTests"
description="Compile unit tests."
depends="compile,compile-solrj">
<mkdir dir="${dest}/tests" />
<solr-javac
destdir="${dest}/tests"
classpathref="test.compile.classpath">
<src path="${src}/test" />
</solr-javac>
<!-- Copy any data files present to the classpath -->
<copy todir="${dest}/tests">
<fileset dir="${src}/test-files" excludes="**/*.java"/>
</copy>
</target>
<!-- Run core unit tests. -->
<target name="test-core"
description="Runs the core unit tests."
depends="init-forrest-entities, compileTests, junit" />
<!-- Run contrib unit tests. -->
<target name="test"
description="Runs the core unit tests."
depends="test-core, test-contrib, test-jsp" />
<target name="junit" depends="compileTests,junit-mkdir,junit-sequential,junit-parallel"/>
<target name="junit-sequential" if="tests.sequential">
<junit-macro/>
</target>
<target name="junit-parallel" unless="tests.sequential">
<parallel threadsPerProcessor="${tests.threadspercpu}">
<junit-macro threadNum="1" threadTotal="8"/>
<junit-macro threadNum="2" threadTotal="8"/>
<junit-macro threadNum="3" threadTotal="8"/>
<junit-macro threadNum="4" threadTotal="8"/>
<junit-macro threadNum="5" threadTotal="8"/>
<junit-macro threadNum="6" threadTotal="8"/>
<junit-macro threadNum="7" threadTotal="8"/>
<junit-macro threadNum="8" threadTotal="8"/>
</parallel>
</target>
<target name="junit-mkdir">
<mkdir dir="${junit.output.dir}"/>
</target>
<macrodef name="junit-macro">
<attribute name="threadNum" default="1"/>
<attribute name="threadTotal" default="1"/>
<attribute name="tempDir" default="${junit.output.dir}/temp"/>
<sequential>
<!-- no description so it doesn't show up in -projecthelp -->
<condition property="runall">
<not>
<or>
<isset property="testcase"/>
<isset property="testpackage"/>
<isset property="testpackageroot"/>
</or>
</not>
</condition>
<!-- <mkdir dir="@{tempDir}/@{pattern}"/>
This is very loud and obnoxious. abuse touch instead for a "quiet" mkdir
-->
<touch file="@{tempDir}/@{threadNum}/quiet.ant" verbose="false" mkdirs="true"/>
<property name="dir.prop" value=""/>
<junit printsummary="no"
haltonfailure="no"
maxmemory="512M"
errorProperty="tests.failed"
failureProperty="tests.failed"
dir="@{tempDir}/@{threadNum}"
tempdir="@{tempDir}/@{threadNum}"
forkmode="perBatch"
>
<sysproperty key="java.util.logging.config.file" value="${common-solr.dir}/testlogging.properties"/>
<sysproperty key="tests.luceneMatchVersion" value="${tests.luceneMatchVersion}"/>
<sysproperty key="tests.codec" value="${tests.codec}"/>
<sysproperty key="tests.locale" value="${tests.locale}"/>
<sysproperty key="tests.timezone" value="${tests.timezone}"/>
<sysproperty key="tests.multiplier" value="${tests.multiplier}"/>
<sysproperty key="tests.iter" value="${tests.iter}"/>
<sysproperty key="tests.seed" value="${tests.seed}"/>
<sysproperty key="tests.verbose" value="${tests.verbose}"/>
<sysproperty key="jetty.testMode" value="1"/>
<sysproperty key="tempDir" file="@{tempDir}/@{threadNum}"/>
<sysproperty key="testmethod" value="${testmethod}"/>
<!-- set whether or not nightly tests should run -->
<sysproperty key="tests.nightly" value="${tests.nightly}"/>
<!-- TODO: why is this unconditionally set to "" above? disable for now
<jvmarg line="${dir.prop}"/>
-->
<jvmarg line="${args}"/>
<formatter classname="${junit.details.formatter}" usefile="false" if="junit.details"/>
<classpath refid="test.run.classpath"/>
<assertions>
<enable package="org.apache.lucene"/>
<enable package="org.apache.solr"/>
</assertions>
<formatter type="${junit.formatter}"/>
<batchtest fork="yes" todir="${junit.output.dir}" if="runall">
<fileset dir="src/test" includes="**/Test*.java,**/*Test.java">
<custom classname="${junit.parallel.selector}" classpathref="test.run.classpath">
<param name="divisor" value="@{threadTotal}" />
<param name="part" value="@{threadNum}" />
</custom>
</fileset>
</batchtest>
<batchtest fork="yes" todir="${junit.output.dir}" if="testpackage">
<fileset dir="src/test" includes="**/${testpackage}/**/Test*.java,**/${testpackage}/**/*Test.java">
<custom classname="${junit.parallel.selector}" classpathref="test.run.classpath">
<param name="divisor" value="@{threadTotal}" />
<param name="part" value="@{threadNum}" />
</custom>
</fileset>
</batchtest>
<batchtest fork="yes" todir="${junit.output.dir}" if="testpackageroot">
<fileset dir="src/test" includes="**/${testpackageroot}/Test*.java,**/${testpackageroot}/*Test.java">
<custom classname="${junit.parallel.selector}" classpathref="test.run.classpath">
<param name="divisor" value="@{threadTotal}" />
<param name="part" value="@{threadNum}" />
</custom>
</fileset>
</batchtest>
<batchtest fork="yes" todir="${junit.output.dir}" if="testcase">
<fileset dir="src/test" includes="**/${testcase}.java"/>
</batchtest>
</junit>
<fail if="tests.failed">Tests failed!</fail>
</sequential>
</macrodef>
<target name="test-reports"
description="Generates HTML test reports.">
<mkdir dir="${junit.reports}"/>
<junitreport todir="${junit.output.dir}">
<fileset dir="${junit.output.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${junit.reports}"/>
</junitreport>
</target>
<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}/solr_coverage.db">
<fileset dir="src/common"/>
<fileset dir="src/solrj"/>
<fileset dir="src/java"/>
<fileset dir="src/webapp/src"/>
<fileset dir="contrib/dataimporthandler/src/main/java" />
<fileset dir="contrib/clustering/src/main/java" />
<fileset dir="contrib/extraction/src/main/java" />
<fileset dir="contrib/uima/src/main/java" />
<fileset dir="contrib/analysis-extras/src/java" />
</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>
<!-- ========================================================================= -->
<!-- Checks that all JSP files in the webapp compile successfully using Jetty's Jasper -->
<target name="test-jsp" depends="compile">
<property name="jsp.target" location="${dest}/jsp-temp" />
<taskdef classname="org.apache.jasper.JspC" name="jasper" >
<classpath>
<fileset dir="example/lib" includes="**/*.jar" />
</classpath>
</taskdef>
<delete dir="${jsp.target}" />
<mkdir dir="${jsp.target}" />
<jasper
uriroot="${src}/webapp/web"
outputDir="${jsp.target}"
compile="false"
verbose="1"
package="j"
/>
<javac
srcdir="${jsp.target}"
destdir="${jsp.target}"
target="${java.compat.version}"
source="${java.compat.version}"
debug="off"
encoding="utf8"
includeAntRuntime="${javac.includeAntRuntime}"
classpathref="test.compile.classpath"
/>
</target>
<!-- ========================================================================= -->
<!-- ===================== DISTRIBUTION-RELATED TASKS ======================== -->
<!-- ========================================================================= -->
<!-- Creates the Solr distribution files. -->
<target name="dist"
description="Creates the Solr distribution files."
depends="init-forrest-entities, dist-solrj, dist-jar, dist-contrib, dist-war" />
<!-- Creates the Solr WAR file. -->
<target name="dist-war"
description="Creates the Solr WAR Distribution file."
depends="compile, test-jsp, make-manifest, dist-jar, dist-solrj, lucene-jars-to-solr">
<mkdir dir="${dist}" />
<war destfile="${dist}/${fullnamever}.war"
webxml="${web.xml}"
filesetmanifest="skip"
manifest="${dest}/META-INF/MANIFEST.MF">
<lib dir="${lib}">
<exclude name="servlet-api*.jar" />
<exclude name="easymock-*.jar" />
<exclude name="junit-*.jar" />
<exclude name="*.txt" />
<exclude name="*.template" />
</lib>
<lib dir="${lucene-libs}"/>
<lib dir="${dist}">
<include name="${fullname}-solrj-${version}.jar" />
<include name="${fullname}-core-${version}.jar" />
</lib>
<fileset dir="${src}/webapp/web" />
<!-- Include anything put in by contrib projects -->
<fileset dir="${dest}/web" />
<metainf dir="${basedir}" includes="LICENSE.txt,NOTICE.txt"/>
</war>
</target>
<target name="dist-src" description="Creates the Solr source distribution files for maven"
depends="make-manifest">
<mkdir dir="${dist}" />
<solr-jar destfile="${dist}/${fullname}-solrj-src-${version}.jar">
<fileset dir="${src}/common" />
<fileset dir="${src}/solrj"/>
</solr-jar>
<solr-jar destfile="${dist}/${fullname}-core-src-${version}.jar">
<fileset dir="${src}/java" />
<fileset dir="${src}/webapp/src"/>
</solr-jar>
<solr-jar destfile="${dist}/apache-solr-dataimporthandler-src-${version}.jar"
basedir="contrib/dataimporthandler/src/main/java" />
<solr-jar destfile="${dist}/apache-solr-dataimporthandler-extras-src-${version}.jar"
basedir="contrib/dataimporthandler/src/extras/main/java" />
<solr-jar destfile="${dist}/apache-solr-cell-src-${version}.jar"
basedir="contrib/extraction/src" />
<solr-jar destfile="${dist}/apache-solr-clustering-src-${version}.jar"
basedir="contrib/clustering/src" />
<solr-jar destfile="${dist}/apache-solr-analysis-extras-src-${version}.jar"
basedir="contrib/analysis-extras/src" />
<solr-jar destfile="${dist}/apache-solr-uima-src-${version}.jar"
basedir="contrib/uima/src/main/java" >
<fileset dir="contrib/uima/src/main/resources" />
</solr-jar>
</target>
<target name="dist-javadoc" description="Creates the Solr javadoc distribution files for maven"
depends="make-manifest, javadoc">
<mkdir dir="${dist}" />
<solr-jar destfile="${dist}/${fullname}-core-docs-${version}.jar"
basedir="${build.javadoc}/solr" />
<solr-jar destfile="${dist}/${fullname}-solrj-docs-${version}.jar"
basedir="${build.javadoc}/solrj" />
<solr-jar destfile="${dist}/apache-solr-dataimporthandler-docs-${version}.jar"
basedir="${build.javadoc}/contrib-solr-dataimporthandler" />
<solr-jar destfile="${dist}/apache-solr-clustering-docs-${version}.jar"
basedir="${build.javadoc}/contrib-solr-clustering" />
<solr-jar destfile="${dist}/apache-solr-cell-docs-${version}.jar"
basedir="${build.javadoc}/contrib-solr-cell" />
<solr-jar destfile="${dist}/apache-solr-analysis-extras-docs-${version}.jar"
basedir="${build.javadoc}/contrib-solr-analysis-extras" />
<solr-jar destfile="${dist}/apache-solr-uima-docs-${version}.jar"
basedir="${build.javadoc}/contrib-solr-uima" />
</target>
<!-- Creates the solr jar. -->
<target name="dist-jar"
description="Creates the Solr JAR Distribution file."
depends="compile, make-manifest">
<mkdir dir="${dist}" />
<solr-jar destfile="${dist}/${fullname}-core-${version}.jar">
<fileset dir="${dest}/solr" />
</solr-jar>
</target>
<!-- Creates the solr jar. -->
<target name="dist-solrj"
description="Creates the Solr JAR Distribution file."
depends="compile-solrj, make-manifest">
<mkdir dir="${dist}" />
<solr-jar
destfile="${dist}/${fullname}-solrj-${version}.jar"
basedir="${dest}/solrj" />
<mkdir dir="${dist}/solrj-lib" />
<copy todir="${dist}/solrj-lib">
<fileset dir="${lib}">
<include name="commons-codec-*.jar"/>
<include name="commons-io-*.jar"/>
<include name="commons-httpclient-*.jar"/>
<include name="*stax-*.jar" />
<include name="wstx-*.jar" />
<include name="jcl-over-slf4j-*.jar" />
<include name="slf4j-api-*.jar" />
</fileset>
</copy>
</target>
<target name="example"
description="Creates a runnable example configuration."
depends="init-forrest-entities,compile-lucene,dist-contrib,dist-war,example-contrib">
<copy file="${dist}/${fullnamever}.war"
tofile="${example}/webapps/${ant.project.name}.war"/>
<jar destfile="${example}/exampledocs/post.jar"
basedir="${dest}/solr"
filesetmanifest="skip"
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>
<!-- make a distribution -->
<target name="package" depends="package-src,create-package"/>
<!-- copied from lucene build.xml -->
<patternset id="src.dist.patterns"
includes="src/,build.xml,*build*.xml,docs/,*.txt,contrib/,*pom.xml*,lib/,backwards/"
excludes="contrib/db/*/lib/,contrib/*/ext-libs/,src/site/build/"
/>
<target name="package-src"
description="Packages the Solr Source Distribution"
depends="dist">
<mkdir dir="${package.dir}"/>
<delete includeemptydirs="true">
<fileset dir="${example}/work" includes="**/*"/>
</delete>
<delete includeemptydirs="true" failonerror="false">
<fileset dir="${dest}/${fullnamever}" includes="**/*"/>
</delete>
<delete file="${package.dir}/${fullnamever}-src.tgz" failonerror="false" />
<delete file="${package.dir}/${fullnamever}-src.zip" failonerror="false" />
<tar destfile="${package.dir}/${fullnamever}-src.tgz" 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"
includes="LICENSE.txt NOTICE.txt *.txt *.xml lib/** src/** example/** client/** contrib/"
excludes="${package.dir}/** ${dist}/** example/webapps/*.war lib/README.committers.txt **/data/ **/logs/* **/classes/ **/*.sh **/bin/ src/scripts/ src/site/build/ **/target/ client/python client/javascript contrib/**/build/ **/*.iml **/*.ipr **/*.iws" />
<tarfileset dir="."
prefix="${fullnamever}/solr"
includes="src/test-files/solr/lib/classes/empty-file-main-lib.txt" />
<tarfileset dir="."
mode="755"
prefix="${fullnamever}/solr"
includes="**/*.sh **/bin/ src/scripts/" />
<tarfileset dir="../lucene" prefix="${fullnamever}/lucene">
<patternset refid="src.dist.patterns"/>
</tarfileset>
<tarfileset dir="../modules"
prefix="${fullnamever}/modules"
excludes="**/build/" />
</tar>
<solr-checksum file="${package.dir}/${fullnamever}-src.tgz"/>
<gunzip src="${package.dir}/${fullnamever}-src.tgz" dest="${dest}/${fullnamever}-src.tar"/>
<untar src="${dest}/${fullnamever}-src.tar" 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 **/*.cgi **/*.cpp **/*.css **/*.csv **/*.dtd **/*.erb
**/*.fcgi **/.htaccess **/*.htm **/*.html **/*.incl **/*.java
**/*.javacc **/*.jflex **/*.jflex-macro **/*.jj **/*.js
**/*.json **/*.jsp **/*LICENSE **/*.pl **/*.pom
**/*pom.xml.template **/*.properties **/*.py **/*.rake
**/Rakefile **/*.rb **/*.rbbi **/README **/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}-src.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>
<solr-checksum file="${package.dir}/${fullnamever}-src.zip"/>
</target>
<target name="create-package"
description="Packages the Solr Binary Distribution"
depends="dist, example, javadoc">
<mkdir dir="${package.dir}"/>
<delete includeemptydirs="true">
<fileset dir="${example}/work" includes="**/*"/>
</delete>
<delete includeemptydirs="true" failonerror="false">
<fileset dir="${dest}/${fullnamever}" includes="**/*"/>
</delete>
<delete file="${package.dir}/${fullnamever}.tgz" failonerror="false" />
<delete file="${package.dir}/${fullnamever}.zip" failonerror="false" />
<tar destfile="${package.dir}/${fullnamever}.tgz" compression="gzip" longfile="gnu">
<tarfileset dir="."
prefix="${fullnamever}"
includes="LICENSE.txt NOTICE.txt *.txt example/** client/** contrib/**/lib/ contrib/**/lucene-libs/ contrib/**/README.txt contrib/**/CHANGES.txt"
excludes="${dist}/** ${dest}/** lib/README.committers.txt **/data/ **/logs/* **/classes/ **/*.sh **/bin/ src/scripts/** src/site/build/** **/target/** client/ruby/flare/** client/python/** client/javascript/** contrib/**/build/** **/*.iml **/*.ipr **/*.iws" />
<tarfileset dir="."
mode="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" />
<!-- hack: the javadocs are built twice since maven needs separate packages... exclude those -->
<tarfileset dir="${build.docs}"
prefix="${fullnamever}/docs/"
excludes="api/solr/** api/contrib-*/**"
/>
</tar>
<solr-checksum file="${package.dir}/${fullnamever}.tgz"/>
<gunzip src="${package.dir}/${fullnamever}.tgz" dest="${dest}/${fullnamever}.tar"/>
<untar src="${dest}/${fullnamever}.tar" dest="${dest}"/>
<fixcrlf srcdir="${dest}/${fullnamever}"
encoding="UTF-8"
eol="crlf"
includes="**/*.txt **/*.xml **/*.java **/*.html **/*.csv **/*.css **/*.properties **/*.jsp **/*.xsl **/*.py **/*.rb **/*.js **/*.json **/*.pl"
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>
<solr-checksum file="${package.dir}/${fullnamever}.zip"/>
</target>
<target name="build-site" depends="svn-up, init-forrest-entities" description="Prototype Helper for Committers. Assumes SVN is in the path">
<delete dir="src/site/build"/>
<exec executable="forrest" dir="src/site"/>
<copy todir="site">
<fileset dir="src/site/build/site"/>
</copy>
<exec executable="svn" dir="site">
<arg value="ci"/>
<arg value="-m"/>
<arg value="&quot;Forrest Entity updates&quot;"/>
</exec>
<exec executable="svn" dir="src/site">
<arg value="ci"/>
<arg value="-m"/>
<arg value="&quot;Forrest Entity updates&quot;"/>
</exec>
<antcall target="svn-up"/>
</target>
<target name="svn-up">
<exec executable="svn">
<arg value="update"/>
</exec>
</target>
<target name="clean-package-signatures">
<delete failonerror="false">
<fileset dir="${package.dir}">
<include name="**/*.asc"/>
</fileset>
</delete>
</target>
<target name="sign-artifacts" depends="clean-package-signatures">
<!--<property file="${user.home}/.solr/build.properties" />-->
<input message="password:>" addproperty="gpg.passphrase">
<handler classname="org.apache.tools.ant.input.SecureInputHandler" />
</input>
<sign-artifact input.file="${package.dir}/${fullnamever}.tgz" output.file="${package.dir}/${fullnamever}.tgz.asc" gpg.passphrase="${gpg.passphrase}"/>
<sign-artifact input.file="${package.dir}/${fullnamever}.zip" output.file="${package.dir}/${fullnamever}.zip.asc" gpg.passphrase="${gpg.passphrase}"/>
<sign-artifact input.file="${package.dir}/${fullnamever}-src.tgz" output.file="${package.dir}/${fullnamever}-src.tgz.asc" gpg.passphrase="${gpg.passphrase}"/>
<sign-artifact input.file="${package.dir}/${fullnamever}-src.zip" output.file="${package.dir}/${fullnamever}-src.zip.asc" gpg.passphrase="${gpg.passphrase}"/>
<!-- Maven artifacts -->
<sign-maven-dependency-artifacts artifact.id="solr-commons-csv" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-dependency-artifacts artifact.id="solr-noggit" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-dependency-artifacts artifact.id="solr-uima-an-alchemy" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-dependency-artifacts artifact.id="solr-uima-an-calais" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-dependency-artifacts artifact.id="solr-uima-an-tagger" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-dependency-artifacts artifact.id="solr-uima-an-wst" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-war-artifacts artifact.id="solr" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-artifacts artifact.id="solr-analysis-extras" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-artifacts artifact.id="solr-cell" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-artifacts artifact.id="solr-clustering" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-artifacts artifact.id="solr-core" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-artifacts artifact.id="solr-dataimporthandler" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-artifacts artifact.id="solr-dataimporthandler-extras" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-artifacts artifact.id="solr-solrj" gpg.passphrase="${gpg.passphrase}"/>
<sign-maven-artifacts artifact.id="solr-uima" gpg.passphrase="${gpg.passphrase}"/>
<!-- These are special since there are no jars, just poms -->
<sign-artifact input.file="${maven.dist.prefix}/solr-parent/${version}/solr-parent-${version}.pom" gpg.passphrase="${gpg.passphrase}"/>
</target>
<target name="prepare-release" depends="clean, svn-up, build-site, package, sign-artifacts"
description="Prototype helper for Committers. Assumes gpg is in the path"/>
<target name="generate-maven-artifacts" depends="maven.ant.tasks-check,dist,dist-src,dist-javadoc">
<sequential>
<ant target="get-maven-poms" dir=".."/>
<!--
!!!!!!!!!!
NOTE: If you add new artifacts, please make sure you also add to the sign-artifacts target
so that they get signed during release.
!!!!!!!
-->
<mkdir dir="${maven.build.dir}"/>
<mkdir dir="${maven.dist.dir}"/>
<!-- ========== SOLR PARENT POM ========== -->
<m2-deploy pom.xml="pom.xml"/>
<!-- ========== SOLR SPECIFIC NON-MAVENIZED DEPENDENCIES ========== -->
<m2-deploy-with-pom-template pom.xml="lib/solr-commons-csv-pom.xml.template"
jar.file="lib/commons-csv-1.0-SNAPSHOT-r966014.jar" />
<m2-deploy-with-pom-template pom.xml="lib/apache-solr-noggit-pom.xml.template"
jar.file="lib/apache-solr-noggit-r944541.jar" />
<m2-deploy-with-pom-template pom.xml="contrib/uima/lib/solr-uima-an-alchemy-pom.xml.template"
jar.file="contrib/uima/lib/uima-an-alchemy-2.3.1-SNAPSHOT-r1062868.jar" />
<m2-deploy-with-pom-template pom.xml="contrib/uima/lib/solr-uima-an-calais-pom.xml.template"
jar.file="contrib/uima/lib/uima-an-calais-2.3.1-SNAPSHOT-r1062868.jar" />
<m2-deploy-with-pom-template pom.xml="contrib/uima/lib/solr-uima-an-tagger-pom.xml.template"
jar.file="contrib/uima/lib/uima-an-tagger-2.3.1-SNAPSHOT-r1062868.jar" />
<m2-deploy-with-pom-template pom.xml="contrib/uima/lib/solr-uima-an-wst-pom.xml.template"
jar.file="contrib/uima/lib/uima-an-wst-2.3.1-SNAPSHOT-r1076132.jar" />
<!-- ========== SOLR ARTIFACTS ========== -->
<m2-deploy pom.xml="contrib/dataimporthandler/src/pom.xml"
jar.file="${dist}/apache-solr-dataimporthandler-${version}.jar">
<artifact-attachments>
<attach file="${dist}/apache-solr-dataimporthandler-src-${version}.jar" classifier="sources"/>
<attach file="${dist}/apache-solr-dataimporthandler-docs-${version}.jar" classifier="javadoc"/>
</artifact-attachments>
</m2-deploy>
<m2-deploy pom.xml="contrib/dataimporthandler/src/extras/pom.xml"
jar.file="${dist}/apache-solr-dataimporthandler-extras-${version}.jar">
<artifact-attachments>
<attach file="${dist}/apache-solr-dataimporthandler-extras-src-${version}.jar" classifier="sources"/>
<attach file="${dist}/apache-solr-dataimporthandler-docs-${version}.jar" classifier="javadoc"/>
</artifact-attachments>
</m2-deploy>
<m2-deploy pom.xml="contrib/extraction/pom.xml"
jar.file="${dist}/apache-solr-cell-${version}.jar">
<artifact-attachments>
<attach file="${dist}/apache-solr-cell-src-${version}.jar" classifier="sources"/>
<attach file="${dist}/apache-solr-cell-docs-${version}.jar" classifier="javadoc"/>
</artifact-attachments>
</m2-deploy>
<m2-deploy pom.xml="contrib/clustering/pom.xml"
jar.file="${dist}/apache-solr-clustering-${version}.jar">
<artifact-attachments>
<attach file="${dist}/apache-solr-clustering-src-${version}.jar" classifier="sources"/>
<attach file="${dist}/apache-solr-clustering-docs-${version}.jar" classifier="javadoc"/>
</artifact-attachments>
</m2-deploy>
<m2-deploy pom.xml="contrib/analysis-extras/pom.xml"
jar.file="${dist}/apache-solr-analysis-extras-${version}.jar">
<artifact-attachments>
<attach file="${dist}/apache-solr-analysis-extras-src-${version}.jar" classifier="sources"/>
<attach file="${dist}/apache-solr-analysis-extras-docs-${version}.jar" classifier="javadoc"/>
</artifact-attachments>
</m2-deploy>
<m2-deploy pom.xml="contrib/uima/pom.xml"
jar.file="${dist}/apache-solr-uima-${version}.jar">
<artifact-attachments>
<attach file="${dist}/apache-solr-uima-src-${version}.jar" classifier="sources"/>
<attach file="${dist}/apache-solr-uima-docs-${version}.jar" classifier="javadoc"/>
</artifact-attachments>
</m2-deploy>
<m2-deploy pom.xml="src/pom.xml"
jar.file="${dist}/apache-solr-core-${version}.jar">
<artifact-attachments>
<attach file="${dist}/apache-solr-core-src-${version}.jar" classifier="sources"/>
<attach file="${dist}/apache-solr-core-docs-${version}.jar" classifier="javadoc"/>
</artifact-attachments>
</m2-deploy>
<m2-deploy pom.xml="src/solrj/pom.xml"
jar.file="${dist}/apache-solr-solrj-${version}.jar">
<artifact-attachments>
<attach file="${dist}/apache-solr-solrj-src-${version}.jar" classifier="sources"/>
<attach file="${dist}/apache-solr-solrj-docs-${version}.jar" classifier="javadoc"/>
</artifact-attachments>
</m2-deploy>
<m2-deploy pom.xml="src/webapp/pom.xml"
jar.file="${dist}/apache-solr-${version}.war"/>
</sequential>
</target>
<target name="set-fsdir">
<property name="use.fsdir" value="true"/>
</target>
<target name="-taskdef">
<typedef resource="org/apache/rat/anttasks/antlib.xml" uri="antlib:rat.anttasks">
<classpath>
<fileset dir="." includes="rat*.jar"/>
</classpath>
</typedef>
</target>
<target name="rat-sources" depends="-taskdef"
description="runs the tasks over src/java excluding the license directory">
<rat:report xmlns:rat="antlib:org.apache.rat.anttasks">
<fileset dir="src/java"/>
<fileset dir="src/test"/>
<fileset dir="src/webapp"/>
<fileset dir="src/common"/>
<fileset dir="src/solrj"/>
<fileset dir="client">
<exclude name="**/CHANGES.*"/>
</fileset>
<fileset dir="contrib/dataimporthandler/src/main/java"/>
<fileset dir="contrib/dataimporthandler/src/test/java"/>
<fileset dir="contrib/dataimporthandler/src/extras/main/java"/>
<fileset dir="contrib/dataimporthandler/src/extras/test/java"/>
<fileset dir="contrib/clustering/src/main/java"/>
<fileset dir="contrib/clustering/src/test/java"/>
<fileset dir="contrib/extraction/src/main/java"/>
<fileset dir="contrib/extraction/src/test/java"/>
<fileset dir="contrib/analysis-extras/src/test"/>
<fileset dir="contrib/analysis-extras/src/test"/>
<fileset dir="contrib/uima/src/main/java"/>
<fileset dir="contrib/uima/src/test/java"/>
</rat:report>
</target>
<!-- ========================================================================= -->
<!-- ===================== Runtime: luke ============================= -->
<!-- ========================================================================= -->
<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">
<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-solr.dir}/../lucene/build/classes/java" />
<pathelement location="${common-solr.dir}/../lucene/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="lucene.classpath"/>
<path refid="luke.classpath"/>
<path refid="test.run.classpath"/>
</classpath>
</java>
</target>
</project>