| <?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="hcatalog" default="jar" |
| xmlns:ivy="antlib:org.apache.ivy.ant" |
| xmlns:artifact="artifact:org.apache.maven.artifact.ant"> |
| |
| <property name="path.to.basedir" location="${basedir}"/> |
| |
| <loadproperties srcfile="${basedir}/build.properties"/> |
| |
| <!-- |
| ================================================================================ |
| Imports |
| ================================================================================ --> |
| |
| <!-- |
| ================================================================================ |
| Properties and Classpaths Section |
| ================================================================================ |
| --> |
| |
| <condition property="staging"> |
| <equals arg1="${repo}" arg2="staging"/> |
| </condition> |
| |
| <!-- e2e test properties --> |
| <property name="test.e2e.dir" value="${basedir}/src/test/e2e/hcatalog"/> |
| |
| <!-- ivy properties set here --> |
| <property name="ivy.repo.dir" value="${user.home}/ivyrepo"/> |
| <property name="ivy.dir" location="ivy"/> |
| <loadproperties srcfile="${ivy.dir}/libraries.properties"/> |
| <property name="asfrepo" value="https://repository.apache.org"/> |
| <property name="asfsnapshotrepo" value="${asfrepo}/content/repositories/snapshots"/> |
| <property name="mvnrepo" value="http://repo2.maven.org/maven2"/> |
| <property name="asfstagingrepo" value="${asfrepo}/service/local/staging/deploy/maven2"/> |
| <property name="ivy.jar" location="${ivy.dir}/ivy-${ivy.version}.jar"/> |
| <property name="ant_task.jar" location="${ivy.dir}/maven-ant-tasks-${ant-task.version}.jar"/> |
| <property name="ant_task_repo_url" |
| value="${mvnrepo}/org/apache/maven/maven-ant-tasks/${ant-task.version}/maven-ant-tasks-${ant-task.version}.jar"/> |
| <property name="ivy_repo_url" value="${mvnrepo}/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar"/> |
| <property name="ivy.xml" location="${basedir}/ivy.xml"/> |
| <property name="ivysettings.xml" location="${ivy.dir}/ivysettings.xml"/> |
| <property name="build.ivy.dir" location="${build.dir}/ivy"/> |
| <property name="pom.file" location="${build.ivy.dir}/${ant.project.name}-${hcatalog.version}.pom"/> |
| <property name="build.ivy.lib.dir" location="${build.ivy.dir}/lib"/> |
| <property name="ivy.lib.dir" location="${build.ivy.lib.dir}/${ant.project.name}"/> |
| <property name="build.ivy.report.dir" location="${build.ivy.dir}/report"/> |
| |
| <!-- packaging properties --> |
| <property name="package.prefix" value="/usr"/> |
| <property name="package.conf.dir" value="/etc/hcatalog"/> |
| <property name="package.log.dir" value="/var/log/hcatalog"/> |
| <property name="package.pid.dir" value="/var/run/hcatalog"/> |
| <property name="package.var.dir" value="/var/lib/hcatalog"/> |
| <property name="package.share.dir" value="/share/hcatalog/${module}"/> |
| <property name="package.buildroot" value="${build.dir}/rpm/hcatalog_package_build_${user.name}"/> |
| <property name="package.build.dir" value="${build.dir}/rpm/hcatalog_package_build_${user.name}/BUILD"/> |
| |
| <!-- rats properties --> |
| <property name="rat.reporting.classname" value="rat.Report"/> |
| |
| <path id="compile.classpath"> |
| <fileset dir="${build.dir}/ivy/lib/default"> |
| <include name="**/*.jar"/> |
| </fileset> |
| </path> |
| |
| <path id="test.class.path"> |
| <pathelement location="${test.classes}"/> |
| <pathelement location="${build.classes}"/> |
| <pathelement location="conf"/> |
| <fileset dir="${build.dir}/ivy/lib/test"> |
| <include name="**/*.jar"/> |
| </fileset> |
| <pathelement location="${basedir}/hcatalog-pig-adapter/build/hcatalog-pig-adapter-${hcatalog.version}.jar"/> |
| </path> |
| |
| <!-- Classpath that includes all sub packages, used for things like Java docs --> |
| <path id="uber.classpath"> |
| <fileset dir="${basedir}"> |
| <include name="**/build/ivy/lib/default/*.jar"/> |
| </fileset> |
| </path> |
| |
| <!-- This is a little janky because hcatalog-core.jar is not yet a submodule. --> |
| <target name="ivy-report" depends="ivy-retrieve"> |
| <antcall target="_ivy-report"/> |
| <ant target="_ivy-report" dir="hcatalog-pig-adapter" inheritAll="false" useNativeBasedir="true"/> |
| <ant target="ivy-report" dir="storage-handlers" inheritAll="false" useNativeBasedir="true"/> |
| </target> |
| |
| <target name="ivy-download" description="To download ivy" unless="offline"> |
| <echo message="${ant.project.name}"/> |
| <get src="${ivy_repo_url}" dest="${ivy.jar}" usetimestamp="true" skipexisting="true"/> |
| <typedef uri="antlib:org.apache.ivy.ant" onerror="fail" loaderRef="ivyLoader"> |
| <classpath> |
| <pathelement location="${ivy.jar}"/> |
| </classpath> |
| </typedef> |
| </target> |
| |
| <target name="ivy-init" depends="ivy-download,_ivy-init"> |
| <!-- HCatalog started as a single source tree that produced multiple artifacts. |
| Currently its going through a transition to subprojects. During this transition |
| we jank together pom files for artifacts produced in the existing source tree until |
| they are correctly generated from per-subproject ivy.xml files. --> |
| <copy file="${pom.file}" tofile="${build.ivy.dir}/hcatalog-core-${hcatalog.version}.pom" |
| overwrite="true"/> |
| <replace file="${build.ivy.dir}/hcatalog-core-${hcatalog.version}.pom" |
| token="artifactId>hcatalog" |
| value="artifactId>hcatalog-core"/> |
| |
| <copy file="${pom.file}" overwrite="true" |
| tofile="${build.ivy.dir}/hcatalog-server-extensions-${hcatalog.version}.pom"/> |
| <replace file="${build.ivy.dir}/hcatalog-server-extensions-${hcatalog.version}.pom" |
| token="artifactId>hcatalog" |
| value="artifactId>hcatalog-server-extensions"/> |
| </target> |
| |
| <target name="init" depends="ivy-retrieve,mvn-init"> |
| <mkdir dir="${dist.dir}"/> |
| <mkdir dir="${build.classes}"/> |
| <mkdir dir="${test.classes}"/> |
| </target> |
| |
| <!-- |
| ================================================================================ |
| Main Build and Jar Section |
| ================================================================================ |
| --> |
| <!-- Build HCatalog src files --> |
| <target name="compile-src" depends="init"> |
| <javac encoding="${build.encoding}" srcdir="${src.dir}" excludes="${excludes}" |
| includes="**/*.java" destdir="${build.classes}" debug="${javac.debug}" |
| optimize="${javac.optimize}" target="${javac.version}" |
| source="${javac.version}" deprecation="${javac.deprecation}" |
| includeantruntime="false"> |
| <compilerarg line="${javac.args}"/> |
| <classpath refid="compile.classpath"/> |
| </javac> |
| </target> |
| |
| <!-- Build the hcatalog client jar --> |
| <target name="clientjar" depends="compile-src"> |
| <jar jarfile="${build.dir}/${ant.project.name}/${hcatalog.core.jar}" |
| basedir="${build.classes}"/> |
| <artifact:install file="${build.dir}/${ant.project.name}/${hcatalog.core.jar}"> |
| <artifact:pom file="${build.ivy.dir}/hcatalog-core-${hcatalog.version}.pom"/> |
| </artifact:install> |
| </target> |
| |
| <!-- |
| ================================================================================ |
| Build server side code, mainly listener. |
| ================================================================================ |
| --> |
| <target name="server-extensions" depends="compile-src"> |
| <jar jarfile="${build.dir}/${ant.project.name}/${ant.project.name}-server-extensions-${hcatalog.version}.jar" |
| basedir="${build.classes}" |
| includes="org/apache/hcatalog/listener/**,org/apache/hcatalog/metadata/**"/> |
| <artifact:install |
| file="${build.dir}/${ant.project.name}/${ant.project.name}-server-extensions-${hcatalog.version}.jar"> |
| <artifact:pom file="${build.ivy.dir}/hcatalog-server-extensions-${hcatalog.version}.pom"/> |
| </artifact:install> |
| </target> |
| |
| <!-- |
| ================================================================================ |
| Build both clientjar and server-extensions |
| ================================================================================ |
| --> |
| <target name="jar" depends="checkstyle,shims,clientjar,server-extensions,jar-storage-handlers"> |
| <ant target="jar" dir="hcatalog-pig-adapter" inheritAll="false"/> |
| <ant target="jar" dir="webhcat/svr" inheritAll="false"/> |
| <ant target="jar" dir="webhcat/java-client" inheritAll="false"/> |
| |
| <!-- Build hcatalog.jar, bundling the pig adapter. Our intention is to stop producing this |
| fat jar after some migration period. --> |
| <jar jarfile="${build.dir}/${ant.project.name}/${hcatalog.jar}"> |
| <zipfileset src="${build.dir}/${ant.project.name}/${hcatalog.core.jar}"/> |
| <zipfileset src="hcatalog-pig-adapter/build/hcatalog-pig-adapter-${hcatalog.version}.jar"/> |
| </jar> |
| </target> |
| |
| <!-- |
| ================================================================================ |
| Build shims |
| ================================================================================ |
| --> |
| |
| <target name="shims" depends="compile-src"> |
| <ant antfile="shims/build.xml" target="jar" inheritAll="false" useNativeBasedir="true"/> |
| </target> |
| |
| <!-- |
| ================================================================================ |
| Build storage handlers |
| ================================================================================ |
| --> |
| |
| <target name="jar-storage-handlers"> |
| <ant target="jar" dir="storage-handlers" inheritAll="false" useNativeBasedir="true"/> |
| </target> |
| |
| <!-- |
| ================================================================================ |
| Test Section |
| ================================================================================ |
| --> |
| <!-- Build HCatalog test files --> |
| <target name="compile-test" depends="jar"> |
| <javac |
| encoding="${build.encoding}" |
| srcdir="${test.src.dir}" |
| excludes="${test.excludes}" |
| includes="**/*.java" |
| destdir="${test.classes}" |
| debug="${javac.debug}" |
| optimize="${javac.optimize}" |
| target="${javac.version}" |
| source="${javac.version}" |
| deprecation="${javac.deprecation}" |
| includeantruntime="false"> |
| <compilerarg line="${javac.args}"/> |
| <classpath refid="test.class.path"/> |
| </javac> |
| </target> |
| |
| <target name="test" depends="compile-test" description="run unit tests"> |
| <_junit srcDir="${basedir}/src/test"/> |
| <ant target="test" dir="hcatalog-pig-adapter" inheritAll="false"/> |
| <ant target="test" dir="webhcat/svr" inheritAll="false"/> |
| <ant target="test" dir="webhcat/java-client" inheritAll="false"/> |
| <ant target="test" dir="storage-handlers" inheritAll="false" useNativeBasedir="true"/> |
| </target> |
| |
| <target name="test-with-clover" depends="clover-init, compile-test" |
| description="run unit tests and generate code coverage reports"> |
| <_junit srcDir="${basedir}/src/test"/> |
| <ant target="_test-with-clover" dir="hcatalog-pig-adapter" inheritAll="false"/> |
| <ant target="_test-with-clover" dir="webhcat/svr" inheritAll="false"/> |
| <ant target="_test-with-clover" dir="webhcat/java-client" inheritAll="false"/> |
| <!-- storage-handlers do not have coverage as they have not |
| yet been migrated to the new build files. --> |
| <ant target="test" dir="storage-handlers" inheritAll="false" useNativeBasedir="true"/> |
| </target> |
| |
| |
| <!-- |
| ================================================================================ |
| Findbugs Section |
| ================================================================================ |
| --> |
| |
| <target name="findbugs" depends="init-findbugs,jar"> |
| <property name="findbugs.out.dir" value="${test.dir}/findbugs"/> |
| <property name="findbugs.exclude.file" value="${test.src.dir}/findbugsExcludeFile.xml"/> |
| <property name="findbugs.report.htmlfile" |
| value="${findbugs.out.dir}/hcat-findbugs-report.html"/> |
| <property name="findbugs.report.xmlfile" |
| value="${findbugs.out.dir}/hcat-findbugs-report.xml"/> |
| |
| <_findbugs outputDir="${findbugs.out.dir}" |
| outputFile="${findbugs.report.xmlfile}" |
| excludeFilter="${findbugs.exclude.file}" |
| findbugsReportXmlFile="${findbugs.report.xmlfile}" |
| findbugsReportHtmlFile="${findbugs.report.htmlfile}" |
| sourceDir="${src.dir}" |
| jarDir="${build.dir}/${ant.project.name}" |
| classPathRef="compile.classpath"/> |
| |
| <ant target="findbugs" dir="hcatalog-pig-adapter" inheritAll="false"/> |
| <ant target="findbugs" dir="webhcat/svr" inheritAll="false"/> |
| <ant target="findbugs" dir="webhcat/java-client" inheritAll="false"/> |
| </target> |
| |
| <!-- |
| ================================================================================ |
| Clean Section |
| ================================================================================ |
| --> |
| <!-- Clean up children --> |
| <target name="clean" description="Cleanup all build artifacts"> |
| <echo message="${ant.project.name}"/> |
| <delete dir="${build.dir}"/> |
| <delete dir="${test.warehouse.dir}"/> |
| <ant target="clean" dir="hcatalog-pig-adapter" inheritAll="false"/> |
| <ant target="clean" dir="webhcat/svr" inheritAll="false"/> |
| <ant target="clean" dir="webhcat/java-client" inheritAll="false"/> |
| <ant target="clean" dir="storage-handlers" inheritAll="false" useNativeBasedir="true"/> |
| <ant target="clean" dir="shims" inheritAll="false" useNativeBasedir="true"/> |
| </target> |
| |
| <!-- |
| ================================================================================ |
| Docs Section |
| ================================================================================ |
| --> |
| <target name="docs" depends="forrest, javadoc" |
| description="Generate Javadoc and Forrest documentation"> |
| </target> |
| |
| <target name="forrest" if="forrest.home" |
| description="Generate forrest-based documentation. To use, specify -Dforrest.home=<base of Apache Forrest installation> on the command line."> |
| <exec dir="${docs.src}" executable="${forrest.home}/bin/forrest" |
| failonerror="true"> |
| </exec> |
| <copy todir="${build.docs}/"> |
| <fileset dir="${docs.src}/build/site/"/> |
| </copy> |
| </target> |
| |
| <target name="javadoc" depends="jar" description="Generate Javadoc documentation"> |
| <mkdir dir="${build.javadoc}"/> |
| <javadoc overview="${src.dir}/../docs/overview.html" |
| packagenames="org.apache.hcatalog.*" |
| destdir="${build.javadoc}" |
| author="true" |
| version="true" |
| use="true" |
| noqualifier="all" |
| windowtitle="HCatalog ${hcatalog.version} API" |
| doctitle="HCatalog ${hcatalog.version} API" |
| failonerror="true"> |
| <packageset dir="${src.dir}"/> |
| <packageset dir="hcatalog-pig-adapter/src/main/java"/> |
| <packageset dir="webhcat/svr/src/main/java"/> |
| <packageset dir="webhcat/java-client/src/main/java"/> |
| <classpath> |
| <path refid="uber.classpath"/> |
| </classpath> |
| <group title="hcatalog" packages="org.apache.hcatalog.*"/> |
| </javadoc> |
| </target> |
| |
| <!-- |
| =============================================================================== |
| Distribution Section |
| =============================================================================== |
| --> |
| <target name="package-storage-handlers"> |
| <property name="handlers.dir" value="${dist.dir}/share/hcatalog/storage-handlers"/> |
| <mkdir dir="${handlers.dir}"/> |
| <ant target="package" dir="storage-handlers" inheritAll="false" useNativeBasedir="true"> |
| <property name="dist.handlers.dir" value="${handlers.dir}"/> |
| </ant> |
| <copy todir="${dist.dir}/share/${ant.project.name}/lib" includeEmptyDirs="false" flatten="true"> |
| <fileset dir="${dist.dir}/share/${ant.project.name}/storage-handlers"> |
| <include name="*/lib/*"/> |
| </fileset> |
| </copy> |
| </target> |
| |
| <target name="package" depends="jar, docs" description="Create an HCatalog release"> |
| <mkdir dir="${dist.dir}"/> |
| <mkdir dir="${dist.dir}/share/${ant.project.name}/lib"/> |
| <mkdir dir="${dist.dir}/etc/hcatalog"/> |
| <mkdir dir="${dist.dir}/bin"/> |
| <mkdir dir="${dist.dir}/sbin"/> |
| <mkdir dir="${dist.dir}/share/${ant.project.name}/scripts"/> |
| <mkdir dir="${dist.dir}/share/${ant.project.name}/templates/conf"/> |
| <mkdir dir="${dist.dir}/share/doc/${ant.project.name}"/> |
| <mkdir dir="${dist.dir}/share/doc/${ant.project.name}/api"/> |
| <mkdir dir="${dist.dir}/share/doc/${ant.project.name}/jdiff"/> |
| <mkdir dir="${dist.dir}/share/doc/${ant.project.name}/license"/> |
| |
| <copy todir="${dist.dir}/share/${ant.project.name}" includeEmptyDirs="false"> |
| <fileset dir="${build.dir}/${ant.project.name}/"> |
| <include name="hcatalog-*.jar"/> |
| </fileset> |
| <fileset dir="hcatalog-pig-adapter/build"> |
| <include name="hcatalog-*.jar"/> |
| </fileset> |
| <fileset dir="webhcat/svr/build"> |
| <include name="webhcat-*.jar"/> |
| </fileset> |
| <fileset dir="webhcat/java-client/build"> |
| <include name="webhcat-java-client*.jar"/> |
| </fileset> |
| </copy> |
| |
| <copy todir="${dist.dir}/bin"> |
| <fileset dir="bin/"> |
| <include name="hcat"/> |
| </fileset> |
| |
| </copy> |
| <copy todir="${dist.dir}/libexec"> |
| <fileset dir="bin"> |
| <include name="hcat-config.sh"/> |
| </fileset> |
| </copy> |
| |
| <copy todir="${dist.dir}/sbin"> |
| <fileset dir="${package.dir}"> |
| <include name="*.sh"/> |
| </fileset> |
| </copy> |
| |
| <copy todir="${dist.dir}/etc/${ant.project.name}"> |
| <fileset dir="conf"/> |
| </copy> |
| |
| <copy todir="${dist.dir}/share/${ant.project.name}/scripts"> |
| <fileset dir="scripts"> |
| <include name="*.sh"/> |
| </fileset> |
| </copy> |
| |
| <copy todir="${dist.dir}/share/${ant.project.name}/templates/conf"> |
| <fileset dir="src/packages/templates/conf"> |
| <include name="*"/> |
| </fileset> |
| </copy> |
| |
| <copy todir="${dist.dir}/sbin"> |
| <fileset dir="${package.dir}"> |
| <include name="*.sh"/> |
| </fileset> |
| <fileset dir="webhcat/svr/src/main/bin"> |
| <include name="*.sh"/> |
| </fileset> |
| <fileset dir="bin"> |
| <include name="hcat_server.sh"/> |
| </fileset> |
| </copy> |
| |
| <!-- Copy the licenses and such --> |
| <copy todir="${dist.dir}/share/doc/${ant.project.name}"> |
| <fileset dir="."> |
| <include name="*.txt"/> |
| </fileset> |
| </copy> |
| |
| <copy todir="${dist.dir}/share/doc/${ant.project.name}/license"> |
| <fileset dir="license"/> |
| </copy> |
| |
| <chmod perm="ugo+x" type="file"> |
| <fileset dir="${dist.dir}/bin"/> |
| <fileset dir="${dist.dir}/sbin"/> |
| </chmod> |
| <!--package storage-handlers --> |
| <antcall target="package-storage-handlers"/> |
| </target> |
| |
| <target name="releaseaudit" depends="ivy-retrieve" description="Release Audit activities"> |
| <java classname="${rat.reporting.classname}" fork="true"> |
| <classpath refid="releaseaudit.classpath"/> |
| <arg value="${basedir}/src"/> |
| </java> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- Make release tarball --> |
| <!-- ================================================================== --> |
| <target name="src-release" depends="clean" description="Source distribution"> |
| <mkdir dir="${build.dir}"/> |
| <tar compression="gzip" longfile="gnu" |
| destfile="${build.dir}/${ant.project.name}-src-${hcatalog.version}.tar.gz"> |
| <tarfileset dir="${basedir}" mode="644" prefix="${ant.project.name}-src-${hcatalog.version}"> |
| <include name="conf/**"/> |
| <include name="hcatalog-pig-adapter/**"/> |
| <include name="webhcat/**"/> |
| <include name="ivy/**"/> |
| <exclude name="ivy/*.jar"/> |
| <include name="license/**"/> |
| <include name="shims/**"/> |
| <include name="src/**"/> |
| <include name="storage-handlers/**"/> |
| <include name="*.txt"/> |
| <include name="*.xml"/> |
| <include name="KEYS"/> |
| </tarfileset> |
| <tarfileset dir="" mode="755" prefix="${ant.project.name}-src-${hcatalog.version}"> |
| <include name="scripts/**"/> |
| <include name="bin/**"/> |
| </tarfileset> |
| </tar> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- Make release binary packages --> |
| <!-- ================================================================== --> |
| <target name="tar" depends="package" description="Create release tarball"> |
| <tar compression="gzip" longfile="gnu" destfile="${build.dir}/${final.name}.tar.gz"> |
| <tarfileset dir="${build.dir}" mode="664"> |
| <include name="${final.name}/**"/> |
| <exclude name="${final.name}/bin/*"/> |
| <exclude name="${final.name}/sbin/*"/> |
| <exclude name="${final.name}/share/hcatalog/scripts/*"/> |
| </tarfileset> |
| <tarfileset dir="${build.dir}" mode="755"> |
| <include name="${final.name}/bin/*"/> |
| <include name="${final.name}/sbin/*"/> |
| <include name="${final.name}/share/hcatalog/scripts/*"/> |
| </tarfileset> |
| </tar> |
| </target> |
| |
| <!-- ================================================================== --> |
| <!-- End to end tests --> |
| <!-- ================================================================== --> |
| |
| <target name="test-e2e" description="run end-to-end tests"> |
| <ant dir="${test.e2e.dir}"/> |
| </target> |
| |
| <target name="test-e2e-install" description="deploy end-to-end tests to existing cluster"> |
| <ant dir="${test.e2e.dir}" target="install"/> |
| </target> |
| |
| <target name="test-e2e-deploy" description="deploy end-to-end tests to existing cluster"> |
| <ant dir="${test.e2e.dir}" target="deploy"/> |
| </target> |
| |
| <import file="ant/checkstyle.xml"/> |
| <import file="ant/dependencies.xml"/> |
| <import file="ant/deploy.xml"/> |
| <import file="ant/findbugs.xml"/> |
| <import file="ant/test.xml"/> |
| |
| </project> |