| <?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="lucene-solr" default="-projecthelp" basedir="."> |
| <import file="lucene/common-build.xml"/> |
| |
| <property name="jgit-version" value="5.3.0.201903130848-r"/> |
| |
| <property name="tests.heap-dump-dir" location="heapdumps"/> |
| |
| <property name="maven-build-dir" value="maven-build"/> |
| <property name="maven-version" value="2.2.1"/> |
| <property name="maven.dependencies.filters.file" location="lucene/build/maven.dependencies.filters.properties"/> |
| |
| <property name="smokeTestRelease.dir" location="lucene/build/smokeTestRelease/dist"/> |
| <property name="smokeTestRelease.tmp" location="lucene/build/smokeTestRelease/tmp"/> |
| <property name="smokeTestRelease.testArgs" value=""/> |
| |
| <target name="-projecthelp"> |
| <java fork="false" classname="org.apache.tools.ant.Main" taskname="-"> |
| <arg value="-projecthelp"/> |
| <arg value="-f"/> |
| <arg value="${ant.file}"/> |
| </java> |
| </target> |
| |
| <target name="test-help" description="Test runner help"> |
| <subant buildpath="lucene" target="test-help" inheritall="false" failonerror="true"/> |
| </target> |
| |
| <target name="precommit" description="Run basic checks before committing" |
| depends="check-working-copy,validate,documentation-lint"/> |
| |
| <target name="test" description="Test both Lucene and Solr" depends="resolve-groovy"> |
| <mkdir dir="lucene/build" /> |
| <tempfile property="tests.totals.tmpfile" |
| destdir="lucene/build" |
| prefix=".test-totals-" |
| suffix=".tmp" |
| deleteonexit="true" |
| createfile="true" /> |
| |
| <subant target="test" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| <propertyref name="tests.totals.tmpfile" /> |
| </propertyset> |
| </subant> |
| |
| <property name="tests.totals.toplevel" value="true" /> |
| <antcall target="-check-totals" /> |
| </target> |
| |
| <target name="jacoco" depends="resolve-groovy" description="Generates JaCoCo code coverage reports"> |
| <subant target="jacoco" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="pitest" depends="resolve-groovy" description="Run PITest on both Lucene and Solr"> |
| <subant target="pitest" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="beast"> |
| <fail message="The Beast only works inside of individual modules"/> |
| </target> |
| |
| <target name="documentation" depends="resolve-markdown" description="Generate Lucene and Solr Documentation"> |
| <subant target="documentation" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="documentation-lint" depends="resolve-markdown,-ecj-javadoc-lint-unsupported,-ecj-resolve" description="Validates the generated documentation (HTML errors, broken links,...)"> |
| <subant target="documentation-lint" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="check-forbidden-apis" depends="-install-forbidden-apis" description="Check forbidden API calls in compiled class files."> |
| <subant target="check-forbidden-apis" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="validate" description="Validate dependencies, licenses, etc." depends="validate-source-patterns,resolve-groovy,rat-sources-typedef,-install-forbidden-apis"> |
| <subant target="validate" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| <subant buildpath="lucene" target="check-lib-versions" inheritall="false" failonerror="true"> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="validate-source-patterns" description="Validate source code (invalid code patterns,...)" unless="disable.source-patterns" depends="resolve-groovy,rat-sources-typedef"> |
| <groovy taskname="source-patterns" classpathref="rat.classpath" src="${common.dir}/tools/src/groovy/check-source-patterns.groovy"/> |
| </target> |
| |
| <target name="rat-sources" description="Runs rat across all sources and tests" depends="common.rat-sources"> |
| <subant target="rat-sources" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="resolve" description="Resolves all dependencies"> |
| <subant target="resolve" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <!-- lucene/test-framework and solr/test-framework are excluded from compilation --> |
| <target name="compile" description="Compile Lucene and Solr"> |
| <subant target="compile" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="compile-core" description="Compile Lucene Core"> |
| <subant target="compile-core" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="compile-test" description="Compile Lucene and Solr tests and test-frameworks"> |
| <subant target="compile-test" inheritAll="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="jar" description="Build Lucene and Solr Jar files"> |
| <subant target="jar" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml"/> |
| <fileset dir="solr" includes="build.xml"/> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="jar-src" description="Build Lucene and Solr Source Jar files"> |
| <subant target="jar-src" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml"/> |
| <fileset dir="solr" includes="build.xml"/> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="get-maven-poms" depends="resolve" |
| description="Copy Maven POMs from dev-tools/maven/ to maven-build/"> |
| <ant dir="lucene" target="-get-maven-poms" inheritall="false"/> |
| </target> |
| |
| <target name="clean-maven-build" |
| description="Clean up Maven POMs in working copy"> |
| <delete failonerror="true" dir="${maven-build-dir}/"/> |
| </target> |
| |
| <target name="generate-maven-artifacts" depends="resolve,resolve-groovy,resolve-markdown,install-maven-tasks" |
| description="Generate Maven Artifacts for Lucene and Solr"> |
| <property name="maven.dist.dir" location="dist/maven" /> |
| <mkdir dir="${maven.dist.dir}" /> |
| <ant dir="lucene" inheritall="false"> |
| <target name="-unpack-lucene-tgz"/> |
| <target name="-filter-pom-templates"/> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </ant> |
| <ant dir="solr" target="-unpack-solr-tgz" inheritall="false"> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </ant> |
| <subant target="-dist-maven" inheritall="false" failonerror="true"> |
| <property name="maven.dist.dir" location="${maven.dist.dir}" /> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="-install-maven-artifacts" depends="resolve,resolve-groovy,resolve-markdown,install-maven-tasks"> |
| <ant dir="lucene" inheritall="false"> |
| <target name="-unpack-lucene-tgz"/> |
| <target name="-filter-pom-templates"/> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </ant> |
| <ant dir="solr" target="-unpack-solr-tgz" inheritall="false"> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </ant> |
| <subant target="-install-to-maven-local-repo" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="validate-maven-dependencies" depends="-install-maven-artifacts" |
| description="Validates maven dependencies, licenses, etc."> |
| <subant target="-validate-maven-dependencies" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml"/> |
| <fileset dir="solr" includes="build.xml"/> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="run-maven-build" depends="get-maven-poms,install-maven-tasks,resolve-groovy" description="Runs the Maven build using automatically generated POMs"> |
| <groovy src="${common.dir}/tools/src/groovy/run-maven-build.groovy"/> |
| </target> |
| |
| <target name="remove-maven-artifacts" description="Removes all Lucene/Solr Maven artifacts from the local repository"> |
| <echo message="Removing all Lucene/Solr Maven artifacts from '${user.home}/.m2/repository'..."/> |
| <delete includeemptydirs="true"> |
| <fileset dir="${user.home}/.m2/repository" erroronmissingdir="false"> |
| <include name="org/apache/lucene/**"/> |
| <include name="org/apache/solr/**"/> |
| </fileset> |
| </delete> |
| </target> |
| |
| <target name="netbeans" depends="resolve" description="Setup Netbeans configuration"> |
| <pathconvert property="netbeans.fileset.sourcefolders" pathsep="|" dirsep="/"> |
| <dirset dir="${basedir}/lucene" includes="**/src/java, **/src/examples, **/src/test, **/src/resources" |
| excludes="tools/**, build/**" /> |
| <dirset dir="${basedir}/solr" includes="**/src/java, **/src/examples, **/src/test, **/src/resources" |
| excludes="build/**" /> |
| <map from="${basedir}/" to=""/> |
| </pathconvert> |
| <!-- TODO: find a better way to exclude duplicate JAR files & fix the servlet-api mess! --> |
| <pathconvert property="netbeans.path.libs" pathsep=":" dirsep="/"> |
| <fileset dir="${basedir}/lucene" includes="**/lib/*.jar" |
| excludes="**/*servlet-api*.jar, tools/**, build/**"/> |
| <fileset dir="${basedir}/solr" includes="**/test-lib/*.jar,**/lib/*.jar" |
| excludes="core/test-lib/*servlet-api*.jar, contrib/analysis-extras/**, test-framework/lib/junit*, test-framework/lib/ant*, test-framework/lib/randomizedtesting*, build/**, dist/**, package/**, server/solr-webapp/**" /> |
| <map from="${basedir}/" to=""/> |
| </pathconvert> |
| <mkdir dir="nbproject"/> |
| <copy todir="nbproject" overwrite="true"> |
| <fileset dir="dev-tools/netbeans/nbproject"/> |
| </copy> |
| <xslt in="${ant.file}" out="nbproject/project.xml" style="dev-tools/netbeans/nb-project.xsl" force="true"> |
| <outputproperty name="indent" value="yes"/> |
| <param name="netbeans.fileset.sourcefolders" expression="${netbeans.fileset.sourcefolders}"/> |
| <param name="netbeans.path.libs" expression="${netbeans.path.libs}"/> |
| <param name="netbeans.source-level" expression="1.7"/> |
| </xslt> |
| </target> |
| |
| <target name="clean-netbeans" description="Removes all Netbeans configuration files"> |
| <delete dir="nbproject" failonerror="true"/> |
| <delete dir="nb-build" failonerror="true"/> |
| </target> |
| |
| <target name="eclipse" depends="resolve" description="Setup Eclipse configuration"> |
| <basename file="${basedir}" property="eclipseprojectname"/> |
| <copy file="dev-tools/eclipse/dot.project" tofile=".project" overwrite="false" encoding="UTF-8"> |
| <filterset> |
| <filter token="ECLIPSEPROJECTNAME" value="${eclipseprojectname}"/> |
| </filterset> |
| </copy> |
| <copy overwrite="false" todir="eclipse-build" encoding="UTF-8"> |
| <fileset dir="dev-tools/eclipse" includes="*.launch"/> |
| <filterset> |
| <filter token="ECLIPSEPROJECTNAME" value="${eclipseprojectname}"/> |
| </filterset> |
| </copy> |
| <mkdir dir=".settings"/> |
| <copy todir=".settings/" overwrite="true"> |
| <fileset dir="dev-tools/eclipse/dot.settings" includes="*.prefs" /> |
| </copy> |
| |
| <pathconvert property="eclipse.fileset.sourcefolders" pathsep="|" dirsep="/"> |
| <dirset dir="${basedir}/lucene" includes="**/src/java, **/src/resources, **/src/test, **/src/test-files, **/src/examples" excludes="tools/**, build/**" /> |
| <dirset dir="${basedir}/solr" includes="**/src/java, **/src/resources, **/src/test, **/src/test-files, **/src/examples" excludes="build/**" /> |
| <map from="${basedir}/" to=""/> |
| </pathconvert> |
| <!-- TODO: find a better way to exclude duplicate JAR files & fix the servlet-api mess! --> |
| <pathconvert property="eclipse.fileset.libs" pathsep="|" dirsep="/"> |
| <fileset dir="${basedir}/lucene" includes="**/lib/*.jar" excludes="**/*servlet-api*.jar, tools/**, build/**"/> |
| <fileset dir="${basedir}/solr" includes="**/test-lib/*.jar,**/lib/*.jar" excludes="core/test-lib/*servlet-api*.jar, contrib/analysis-extras/**, test-framework/lib/junit*, test-framework/lib/ant*, test-framework/lib/randomizedtesting*, build/**, dist/**, package/**" /> |
| <map from="${basedir}/" to=""/> |
| </pathconvert> |
| <pathconvert property="eclipse.fileset.webfolders" pathsep="|" dirsep="/"> |
| <dirset dir="${basedir}/solr/server/contexts" excludes="**/*" /> |
| <dirset dir="${basedir}/solr/server/etc" excludes="**/*" /> |
| <dirset dir="${basedir}/solr/server/modules" excludes="**/*" /> |
| <dirset dir="${basedir}/solr/server/solr" excludes="**/*" /> |
| <dirset dir="${basedir}/solr/webapp/web" excludes="**/*" /> |
| <map from="${basedir}/" to=""/> |
| </pathconvert> |
| <xslt in="${ant.file}" out=".classpath" style="dev-tools/eclipse/dot.classpath.xsl" force="true"> |
| <outputproperty name="indent" value="yes"/> |
| <param name="eclipse.fileset.libs" expression="${eclipse.fileset.libs}"/> |
| <param name="eclipse.fileset.sourcefolders" expression="${eclipse.fileset.sourcefolders}"/> |
| <param name="eclipse.fileset.webfolders" expression="${eclipse.fileset.webfolders}"/> |
| </xslt> |
| |
| <echo> |
| SUCCESS: You must right-click your project and choose Refresh. |
| Your project must use a Java 8 JRE. |
| </echo> |
| </target> |
| |
| <target name="clean-eclipse" description="Removes all Eclipse configuration files"> |
| <delete dir=".settings" failonerror="true"/> |
| <delete failonerror="true"> |
| <fileset dir="." includes=".classpath,.project"/> |
| </delete> |
| <delete dir="eclipse-build" failonerror="true"/> |
| </target> |
| |
| <target name="idea" depends="resolve" description="Setup IntelliJ IDEA configuration"> |
| <condition property="idea.jdk.is.set"> |
| <isset property="idea.jdk"/> |
| </condition> |
| <!-- Define ${idea.jdk} if it's not yet defined - otherwise literal "${idea.jdk}" is substituted --> |
| <property name="idea.jdk" value=""/> |
| <!-- delete those files first, so they are regenerated by the filtering below |
| (add more files with dynamic properties like versions here): --> |
| <delete dir=".idea" includes="misc.xml workspace.xml"/> |
| <!-- Copy files with filtering: --> |
| <copy todir="." overwrite="false" encoding="UTF-8"> |
| <fileset dir="dev-tools/idea"/> |
| <filterset begintoken="subst.="" endtoken="""> |
| <filter token="idea.jdk" value="${idea.jdk}"/> |
| </filterset> |
| <filterset> |
| <filter token="version" value="${version}"/> |
| <filter token="version.base" value="${version.base}"/> |
| </filterset> |
| </copy> |
| <antcall target="-post-idea-instructions"/> |
| </target> |
| |
| <target name="-post-idea-instructions" unless="idea.jdk.is.set"> |
| <echo> |
| To complete IntelliJ IDEA setup, you must manually configure |
| File | Project Structure | Project | Project SDK. |
| |
| You won't have to do this in the future if you define property |
| $${idea.jdk}, e.g. in ~/lucene.build.properties, ~/build.properties |
| or lucene/build.properties, with a value consisting of the |
| following two XML attributes/values (adjust values according to |
| JDKs you have defined locally - see |
| File | Project Structure | Platform Settings | SDKs): |
| |
| idea.jdk = project-jdk-name="1.8" project-jdk-type="JavaSDK" |
| </echo> |
| </target> |
| |
| <target name="clean-idea" |
| description="Removes all IntelliJ IDEA configuration files"> |
| <delete dir=".idea" failonerror="true"/> |
| <delete failonerror="true"> |
| <fileset dir="." includes="*.iml,*.ipr,*.iws"/> |
| <fileset dir="solr" includes="**/*.iml"/> |
| <fileset dir="lucene" includes="**/*.iml"/> |
| </delete> |
| <delete dir="idea-build" failonerror="true"/> |
| </target> |
| |
| <target name="clean" description="Clean Lucene and Solr build dirs"> |
| <delete dir="dist" /> |
| <delete dir="${tests.heap-dump-dir}" /> |
| <subant target="clean" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="clean-jars" description="Remove all JAR files from lib folders in the checkout"> |
| <delete failonerror="true"> |
| <fileset dir="."> |
| <include name="**/*.jar"/> |
| <exclude name="*/build/**"/> |
| <exclude name="*/dist/**"/> |
| <exclude name="*/package/**"/> |
| <exclude name="*/example/exampledocs/**"/> |
| </fileset> |
| </delete> |
| </target> |
| |
| <target name="jar-checksums" description="Recompute SHA1 checksums for all JAR files."> |
| <subant target="jar-checksums" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <target name="-nightly-smoke-java9params" if="smokeTestRelease.java9"> |
| <!-- convert path to UNIX style, so windows backslashes don't hurt escaping: --> |
| <pathconvert targetos="unix" property="-smokeTestRelease.java9params"> |
| <regexpmapper from="^(.*)$" to="--test-java9 '\1'"/> |
| <path location="${smokeTestRelease.java9}"/> |
| </pathconvert> |
| </target> |
| |
| <target name="nightly-smoke" description="Builds an unsigned release and smoke tests it (pass '-DsmokeTestRelease.java9=/path/to/jdk-9' to additionally test with Java 9 or later)" |
| depends="clean,resolve-groovy,resolve-markdown,install-maven-tasks,-nightly-smoke-java9params"> |
| <fail message="To run nightly smoke, the JDK must be exactly Java 1.8, was: ${java.specification.version}"> |
| <condition> |
| <not><equals arg1="${java.specification.version}" arg2="1.8"/></not> |
| </condition> |
| </fail> |
| <property name="-smokeTestRelease.java9params" value=""/><!-- (if not yet defined) --> |
| <exec executable="${python3.exe}" failonerror="true" taskname="python3"> |
| <arg value="-V"/> |
| </exec> |
| <subant target="prepare-release-no-sign" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <!-- pass ${version.base} here to emulate a real release, without appendix like "-SNAPSHOT": --> |
| <property name="version" value="${version.base}" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| <mkdir dir="${smokeTestRelease.dir}"/> |
| <copy todir="${smokeTestRelease.dir}/lucene"> |
| <fileset dir="lucene/dist"/> |
| </copy> |
| <copy todir="${smokeTestRelease.dir}/solr"> |
| <fileset dir="solr/package"/> |
| </copy> |
| <local name="url"/> |
| <makeurl file="${smokeTestRelease.dir}" validate="false" property="url"/> |
| <exec executable="${python3.exe}" failonerror="true" taskname="smoker"> |
| <arg value="-u"/> |
| <!-- Tell Python not to write any bytecode cache into the filesystem: --> |
| <arg value="-B"/> |
| <arg file="dev-tools/scripts/smokeTestRelease.py"/> |
| <arg line="${-smokeTestRelease.java9params}"/> |
| <arg value="--revision"/> |
| <arg value="skip"/> |
| <!-- pass ${version.base} here to emulate a real release, without appendix like "-SNAPSHOT": --> |
| <arg value="--version"/> |
| <arg value="${version.base}"/> |
| <arg value="--tmp-dir"/> |
| <arg file="${smokeTestRelease.tmp}"/> |
| <arg value="--not-signed"/> |
| <arg value="${url}"/> |
| <arg value="${smokeTestRelease.testArgs}"/> |
| </exec> |
| <delete dir="${smokeTestRelease.dir}"/> |
| <delete dir="${smokeTestRelease.tmp}"/> |
| </target> |
| |
| <macrodef xmlns:ivy="antlib:org.apache.ivy.ant" name="wc-checker"> |
| <attribute name="failonmodifications"/><!-- fail if modifications were found, otherwise it only fails on unversioned files --> |
| <sequential> |
| <local name="wc.unversioned.files"/> |
| <local name="wc.modified.files"/> |
| <ivy:cachepath xmlns:ivy="antlib:org.apache.ivy.ant" transitive="true" resolveId="jgit" pathid="jgit.classpath"> |
| <ivy:dependency org="org.eclipse.jgit" name="org.eclipse.jgit" rev="${jgit-version}" conf="default" /> |
| <ivy:dependency org="org.slf4j" name="slf4j-nop" rev="1.7.2" conf="default" /> |
| </ivy:cachepath> |
| <groovy taskname="wc-checker" classpathref="jgit.classpath" src="${common.dir}/tools/src/groovy/check-working-copy.groovy"/> |
| <fail if="wc.unversioned.files" |
| message="Source checkout is dirty (unversioned/missing files) after running tests!!! Offending files:${line.separator}${wc.unversioned.files}"/> |
| <fail message="Source checkout is modified!!! Offending files:${line.separator}${wc.modified.files}"> |
| <condition> |
| <and> |
| <istrue value="@{failonmodifications}"/> |
| <isset property="wc.modified.files"/> |
| </and> |
| </condition> |
| </fail> |
| </sequential> |
| </macrodef> |
| |
| <target name="check-working-copy" description="Checks working copy for unversioned changes" depends="resolve-groovy"> |
| <wc-checker failonmodifications="${is.jenkins.build}"/> |
| </target> |
| |
| <target name="run-clover" description="Runs all tests to measure coverage and generates report (pass "ANT_OPTS=-Xmx2G" as environment)" depends="clean"> |
| <antcall inheritAll="false"> |
| <param name="run.clover" value="true"/> |
| <!-- must be 1, as clover does not like parallel test runs: --> |
| <param name="tests.jvms.override" value="1"/> |
| <!-- Also override some other props to be fast: --> |
| <param name="tests.multiplier" value="1"/> |
| <param name="tests.nightly" value="false"/> |
| <param name="tests.weekly" value="false"/> |
| <param name="tests.badapples" value="true"/> |
| <!-- The idea behind Clover is to determine test coverage, so be immune to failing tests: --> |
| <param name="tests.haltonfailure" value="false"/> |
| |
| <target name="clover"/> |
| <target name="test"/> |
| <target name="-generate-clover-reports"/> |
| |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </antcall> |
| </target> |
| |
| <!-- |
| Run after Junit tests. |
| |
| This target is in a separate file, as it needs to include common-build.xml, |
| but must run from top-level! |
| --> |
| <target name="-generate-clover-reports" depends="clover"> |
| <fail unless="run.clover">Clover not enabled!</fail> |
| <mkdir dir="${clover.report.dir}"/> |
| <fileset dir="." id="clover.test.result.files"> |
| <include name="*/build/**/test/TEST-*.xml"/> |
| </fileset> |
| <fileset dir="." id="clover.test.src.files"> |
| <include name="**/src/test/**/*.java"/> |
| <!-- test framework source files are all test code: --> |
| <include name="*/test-framework/src/**/*.java"/> |
| </fileset> |
| <clover-report projectName="Apache Lucene/Solr"> |
| <current outfile="${clover.report.dir}" title="Apache Lucene/Solr ${version}" numThreads="0"> |
| <format type="html" filter="assert"/> |
| <testresults refid="clover.test.result.files"/> |
| <testsources refid="clover.test.src.files"/> |
| </current> |
| <current outfile="${clover.report.dir}/clover.xml" title="Apache Lucene/Solr ${version}"> |
| <format type="xml" filter="assert"/> |
| <testresults refid="clover.test.result.files"/> |
| <testsources refid="clover.test.src.files"/> |
| </current> |
| </clover-report> |
| <echo>You can find the merged Lucene/Solr Clover report in '${clover.report.dir}'.</echo> |
| </target> |
| |
| <target name="test-with-heapdumps" depends="resolve-groovy,-test-with-heapdumps-enabled,-test-with-heapdumps-disabled" description="Runs tests with heap dumps on OOM enabled (if VM supports this)"/> |
| |
| <condition property="vm.supports.heapdumps"> |
| <or> |
| <contains string="${java.vm.name}" substring="hotspot" casesensitive="false"/> |
| <contains string="${java.vm.name}" substring="openjdk" casesensitive="false"/> |
| </or> |
| </condition> |
| |
| <target name="-test-with-heapdumps-enabled" if="vm.supports.heapdumps"> |
| <echo level="info" message="${java.vm.name}: Enabling heap dumps on OutOfMemoryError to dir '${tests.heap-dump-dir}'."/> |
| <mkdir dir="${tests.heap-dump-dir}"/> |
| <delete includeEmptyDirs="true"> |
| <fileset dir="${tests.heap-dump-dir}" includes="**/*"/> |
| </delete> |
| <antcall inheritAll="false" target="test"> |
| <param name="tests.heapdump.args" value="-XX:+HeapDumpOnOutOfMemoryError "-XX:HeapDumpPath=${tests.heap-dump-dir}""/> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </antcall> |
| <pathconvert property="heapdumps.list" setonempty="false" pathsep="${line.separator}"> |
| <fileset dir="${tests.heap-dump-dir}"/> |
| <map from="${tests.heap-dump-dir}${file.separator}" to="* "/> |
| </pathconvert> |
| <fail if="heapdumps.list" message="Some of the tests produced a heap dump, but did not fail. Maybe a suppressed OutOfMemoryError? Dumps created:${line.separator}${heapdumps.list}"/> |
| <delete dir="${tests.heap-dump-dir}"/> |
| </target> |
| |
| <target name="-test-with-heapdumps-disabled" unless="vm.supports.heapdumps"> |
| <echo level="warning" message="WARN: The used JVM (${java.vm.name}) does not support HPROF heap dumps on OutOfMemoryError."/> |
| <antcall target="test"> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </antcall> |
| </target> |
| |
| <target name="regenerate" description="Runs all code regenerators"> |
| <subant target="regenerate" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <!-- todo: |
| <fileset dir="solr" includes="build.xml" />--> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <!-- should only be called by jenkins, not precommit! --> |
| <target name="-check-after-regeneration" depends="resolve-groovy"> |
| <wc-checker failonmodifications="true"/> |
| </target> |
| |
| <!-- TODO: remove me when jenkins works --> |
| <target name="regenerateAndCheck" depends="regenerate,-check-after-regeneration"/> |
| |
| <target name="-append-all-modules-dependencies-properties"> |
| <delete file="lucene/build/module.dependencies.properties"/> |
| <subant target="-append-module-dependencies-properties" inheritall="false" failonerror="true"> |
| <fileset dir="lucene" includes="build.xml" /> |
| <fileset dir="solr" includes="build.xml" /> |
| <propertyset refid="uptodate.and.compiled.properties"/> |
| </subant> |
| </target> |
| |
| <!-- Jenkins tasks --> |
| <target name="-jenkins-base" depends="-print-java-info,clean,test-with-heapdumps,validate,documentation-lint,jar-checksums,check-working-copy"/> |
| |
| <target name="-print-java-info"> |
| <echo level="info" taskname="java-info">java version "${java.version}" |
| ${java.runtime.name} (${java.runtime.version}, ${java.vendor}) |
| ${java.vm.name} (${java.vm.version}, ${java.vm.vendor}) |
| Test args: [${args}]</echo> |
| </target> |
| |
| <target name="jenkins-hourly"> |
| <antcall> |
| <param name="is.jenkins.build" value="true"/> |
| <param name="tests.haltonfailure" value="false"/> |
| <param name="tests.badapples" value="false"/> |
| <target name="-jenkins-base"/> |
| </antcall> |
| </target> |
| |
| <target name="jenkins-badapples"> |
| <antcall> |
| <param name="is.jenkins.build" value="true"/> |
| <param name="tests.haltonfailure" value="false"/> |
| <param name="tests.badapples" value="true"/> |
| <target name="-jenkins-base"/> |
| </antcall> |
| </target> |
| |
| <target name="jenkins-nightly"> |
| <antcall> |
| <param name="is.jenkins.build" value="true"/> |
| <param name="tests.haltonfailure" value="false"/> |
| <param name="tests.nightly" value="true"/> |
| <param name="tests.badapples" value="false"/> |
| <target name="-jenkins-base"/> |
| </antcall> |
| </target> |
| |
| <target name="jenkins-nightly-badapples"> |
| <antcall> |
| <param name="is.jenkins.build" value="true"/> |
| <param name="tests.haltonfailure" value="false"/> |
| <param name="tests.nightly" value="true"/> |
| <param name="tests.badapples" value="true"/> |
| <target name="-jenkins-base"/> |
| </antcall> |
| </target> |
| |
| <target name="jenkins-maven-nightly" depends="-print-java-info,clean,clean-maven-build,resolve-groovy,resolve-markdown,install-maven-tasks"> |
| <!-- step 1: build, install, validate and publish ANT-generated maven artifacts: --> |
| <antcall> |
| <param name="is.jenkins.build" value="true"/> |
| <target name="remove-maven-artifacts"/> |
| <target name="validate-maven-dependencies"/> |
| <target name="generate-maven-artifacts"/> |
| </antcall> |
| <!-- step 2: run the maven build to check that the pom templates also work to drive "mvn": --> |
| <antcall> |
| <param name="is.jenkins.build" value="true"/> |
| <target name="remove-maven-artifacts"/> |
| <target name="run-maven-build"/> |
| </antcall> |
| </target> |
| |
| <target name="jenkins-clover" depends="-print-java-info"> |
| <antcall> |
| <param name="is.jenkins.build" value="true"/> |
| <target name="run-clover"/> |
| </antcall> |
| </target> |
| |
| <!-- useless targets (override common-build.xml): --> |
| <target name="generate-test-reports"/> |
| <target name="patch-mrjar-classes"/> |
| </project> |