blob: af20f1a668ea4f4bdf3a1dfa4548055122af62ac [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
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:artifact="artifact:org.apache.maven.artifact.ant">
<!-- This build file doesn't match the Hive pattern yet so don't use their
definitions yet. -->
<!-- <import file="../build-common.xml"/> -->
<property name="path.to.basedir" location="${basedir}"/>
<property name="test.result.dir" location="${build.dir.hive}/hcatalog/test"
description="location to place TEST-*.xml files so that hive's testreport includes them"/>
<property name="hive.dist.dir" location="${build.dir.hive}/dist"
description="where all hive build artifacts are placed to make binary tar ball"/>
<loadproperties srcfile="${basedir}/build.properties"/>
<!--
================================================================================
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"/>
<!-- 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"/>
<target name="init">
<mkdir dir="${dist.dir}"/>
</target>
<!--
================================================================================
Build all jars
================================================================================
-->
<target name="jar" depends="init" description="build all jars">
<ant target="jar" dir="core" inheritAll="false">
<property name="_mvn.hadoop.profile" value="${mvn.hadoop.profile}"/>
</ant>
<ant target="jar" dir="hcatalog-pig-adapter" inheritAll="false">
<property name="_mvn.hadoop.profile" value="${mvn.hadoop.profile}"/>
</ant>
<ant target="jar" dir="server-extensions" inheritAll="false">
<property name="_mvn.hadoop.profile" value="${mvn.hadoop.profile}"/>
</ant>
<ant target="jar" dir="webhcat/svr" inheritAll="false">
<property name="_mvn.hadoop.profile" value="${mvn.hadoop.profile}"/>
</ant>
<ant target="jar" dir="webhcat/java-client" inheritAll="false">
<property name="_mvn.hadoop.profile" value="${mvn.hadoop.profile}"/>
</ant>
<ant target="jar" dir="storage-handlers/hbase" inheritAll="false">
<property name="_mvn.hadoop.profile" value="${mvn.hadoop.profile}"/>
</ant>
</target>
<!--
================================================================================
Test Section
================================================================================
-->
<target name="gen-test" description="Generate tests, a no-op for hcat"/>
<target name="test" depends="jar" description="run unit tests">
<property name="test.target.name" value="test"/>
<antcall target="testonly" />
<!-- One checkstyle run for the whole repo. Runs after junit tests
to piggyback on resolved jars. -->
<path id="checkstyle.class.path">
<fileset dir="core/build/lib/test"/>
</path>
<antcall target="checkstyle" inheritRefs="true"/>
</target>
<target name="testonly">
<if>
<not><isset property="test.target.name"/></not>
<then><property name="test.target.name" value="testonly"/></then>
</if>
<mkdir dir="${test.result.dir}"/>
<!-- Placed in a parallel structure so that the tests keep going
even if some fail. Otherwise a failure in one of the earlier ant
call terminates the target and the rest do not run. -->
<parallel threadCount="1">
<ant target="${test.target.name}" dir="core" inheritAll="false">
<property name="test.result.dir" location="${test.result.dir}"/>
</ant>
<ant target="${test.target.name}" dir="hcatalog-pig-adapter" inheritAll="false">
<property name="test.result.dir" location="${test.result.dir}"/>
</ant>
<ant target="${test.target.name}" dir="server-extensions" inheritAll="false">
<property name="test.result.dir" location="${test.result.dir}"/>
</ant>
<ant target="${test.target.name}" dir="webhcat/svr" inheritAll="false">
<property name="test.result.dir" location="${test.result.dir}"/>
<property name="env.HIVE_HOME" value="${hive.dist.dir}"/>
<property name="env.HCAT_PREFIX" value="${hive.dist.dir}/hcatalog"/>
</ant>
<ant target="${test.target.name}" dir="webhcat/java-client" inheritAll="false">
<property name="test.result.dir" location="${test.result.dir}"/>
</ant>
<ant target="${test.target.name}" dir="storage-handlers/hbase" inheritAll="false">
<property name="test.result.dir" location="${test.result.dir}"/>
</ant>
</parallel>
</target>
<target name="compile-test" depends="jar" description="compile unit tests">
<ant target="compile-test" dir="core" inheritAll="false"/>
<ant target="compile-test" dir="hcatalog-pig-adapter" inheritAll="false"/>
<ant target="compile-test" dir="server-extensions" inheritAll="false"/>
<ant target="compile-test" dir="webhcat/svr" inheritAll="false"/>
<ant target="compile-test" dir="webhcat/java-client" inheritAll="false"/>
<ant target="compile-test" dir="storage-handlers/hbase" inheritAll="false"/>
</target>
<target name="test-with-clover" depends="clover-init"
description="run unit tests and generate code coverage reports">
<ant target="_test-with-clover" dir="core" inheritAll="false"/>
<ant target="_test-with-clover" dir="hcatalog-pig-adapter" inheritAll="false"/>
<ant target="_test-with-clover" dir="server-extensions" 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/hbase" inheritAll="false"/>
</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"/>
<ant target="findbugs" dir="core" inheritAll="false"/>
<ant target="findbugs" dir="hcatalog-pig-adapter" inheritAll="false"/>
<ant target="findbugs" dir="server-extensions" 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}"/>
<ant target="clean" dir="core" inheritAll="false"/>
<ant target="clean" dir="hcatalog-pig-adapter" inheritAll="false"/>
<ant target="clean" dir="server-extensions" 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/hbase" inheritAll="false"/>
</target>
<!-- Clean up children -->
<target name="clean-test" description="Cleanup test artifacts">
<echo message="${ant.project.name}"/>
<delete dir="${test.result.dir}"/>
<delete dir="${build.dir}"/>
<ant target="clean-test" dir="core" inheritAll="false"/>
<ant target="clean-test" dir="hcatalog-pig-adapter" inheritAll="false"/>
<ant target="clean-test" dir="server-extensions" inheritAll="false"/>
<ant target="clean-test" dir="webhcat/svr" inheritAll="false"/>
<ant target="clean-test" dir="webhcat/java-client" inheritAll="false"/>
<ant target="clean-test" dir="storage-handlers/hbase" inheritAll="false"/>
</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=&lt;base of Apache Forrest installation&gt; 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" unless="skip.javadoc">
<mkdir dir="${build.javadoc}"/>
<record name="${build.dir}/javadoc.log" action="start"/>
<!--NOTE: old org.apache.hcatalog is intentionally excluded since 0.11
version of the JavaDocs is available online-->
<javadoc overview="${src.dir}/../docs/overview.html"
packagenames="org.apache.hive.hcatalog.*"
destdir="${build.javadoc}"
author="true"
version="true"
use="true"
noqualifier="all"
windowtitle="HCatalog ${hcatalog.version} API"
doctitle="HCatalog ${hcatalog.version} API"
failonerror="true"
useexternalfile="yes">
<packageset dir="core/src/main/java"/>
<packageset dir="hcatalog-pig-adapter/src/main/java"/>
<packageset dir="server-extensions/src/main/java"/>
<packageset dir="storage-handlers/hbase/src/gen-java"/>
<packageset dir="storage-handlers/hbase/src/java"/>
<packageset dir="webhcat/svr/src/main/java"/>
<packageset dir="webhcat/java-client/src/main/java"/>
<classpath>
<fileset dir="core/build/lib/compile"/>
<fileset dir="hcatalog-pig-adapter/build/lib/compile" includes="pig*.jar"/>
<fileset dir="server-extensions/build/lib/compile" includes="jms*.jar"/>
<fileset dir="storage-handlers/hbase/build/lib/compile" includes="hbase*.jar,hive-hbase*.jar"/>
<fileset dir="webhcat/svr/build/lib/provided" includes="hcatalog-core*.jar"/>
<fileset dir="webhcat/svr/build/lib/compile" includes="jetty*.jar,jersey*.jar,commons-exec*.jar,jul-to-slf4j*.jar"/>
</classpath>
<group title="hcatalog" packages="org.apache.hive.hcatalog.*"/>
</javadoc>
<record name="${build.dir}/javadoc.log" action="stop"/>
<condition property="javadoc.warnings">
<isfileselected file="${build.dir}/javadoc.log">
<contains text="warnings"/>
</isfileselected>
</condition>
<fail if="javadoc.warnings">Javadoc comments contain warnings.</fail>
</target>
<!--
===============================================================================
Deploy Section
===============================================================================
-->
<target name="mvn-deploy" depends="mvn-init"
description="Deploy artifacts to a Maven repository.">
<artifact:deploy file="pom.xml">
<artifact:pom file="pom.xml"/>
<remoteRepository id="${mvn.deploy.repo.id}" url="${mvn.deploy.repo.url}"/>
</artifact:deploy>
<ant target="mvn-deploy" dir="core" inheritAll="false" useNativeBasedir="true"/>
<ant target="mvn-deploy" dir="hcatalog-pig-adapter" inheritAll="false" useNativeBasedir="true"/>
<ant target="mvn-deploy" dir="server-extensions" inheritAll="false" useNativeBasedir="true"/>
<ant target="mvn-deploy" dir="webhcat/java-client" inheritAll="false" useNativeBasedir="true"/>
<ant target="mvn-deploy" dir="webhcat/svr" inheritAll="false" useNativeBasedir="true"/>
</target>
<target name="mvn-deploy-signed" depends="mvn-init"
description="Sign and deploy artifacts to a Maven repository.">
<input message="Enter your gpg password (or just press return if using an agent): "
addproperty="gpg.passphrase">
<handler classname="org.apache.tools.ant.input.SecureInputHandler"/>
</input>
<_sign inputFile="pom.xml"/>
<artifact:deploy file="pom.xml">
<artifact:pom file="pom.xml"/>
<attach file="pom.xml.asc" type="pom.asc"/>
<remoteRepository id="${mvn.deploy.repo.id}" url="${mvn.deploy.repo.url}"/>
</artifact:deploy>
<ant target="mvn-deploy-signed" dir="core" inheritAll="false" useNativeBasedir="true">
<property name="gpg.passphrase" value="${gpg.passphrase}"/>
</ant>
<ant target="mvn-deploy-signed" dir="hcatalog-pig-adapter" inheritAll="false" useNativeBasedir="true">
<property name="gpg.passphrase" value="${gpg.passphrase}"/>
</ant>
<ant target="mvn-deploy-signed" dir="server-extensions" inheritAll="false" useNativeBasedir="true">
<property name="gpg.passphrase" value="${gpg.passphrase}"/>
</ant>
<ant target="mvn-deploy-signed" dir="webhcat/java-client" inheritAll="false" useNativeBasedir="true">
<property name="gpg.passphrase" value="${gpg.passphrase}"/>
</ant>
<ant target="mvn-deploy-signed" dir="webhcat/svr" inheritAll="false" useNativeBasedir="true">
<property name="gpg.passphrase" value="${gpg.passphrase}"/>
</ant>
</target>
<!--
===============================================================================
Distribution Section
===============================================================================
-->
<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="core/build">
<include name="hcatalog-*.jar"/>
</fileset>
<fileset dir="hcatalog-pig-adapter/build">
<include name="hcatalog-*.jar"/>
</fileset>
<fileset dir="server-extensions/build">
<include name="hcatalog-*.jar"/>
</fileset>
</copy>
<copy todir="${dist.dir}/share/webhcat/svr/" includeEmptyDirs="false">
<fileset dir="webhcat/svr/build">
<include name="webhcat-*.jar"/>
</fileset>
</copy>
<copy todir="${dist.dir}/share/webhcat/svr/lib/" includeEmptyDirs="false">
<fileset dir="webhcat/svr/build/lib/compile/">
<include name="*.jar"/>
</fileset>
</copy>
<copy todir="${dist.dir}/share/webhcat/java-client/" includeEmptyDirs="false">
<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"/>
<include name="hcat.py"/>
<include name="hcatcfg.py"/>
<include name="templeton.cmd"/>
</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}/etc/webhcat">
<fileset dir="webhcat/svr/src/main/config/" />
</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"/>
<include name="hcat_server.py"/>
<include name="hcatcfg.py"/>
</fileset>
</copy>
<!-- Copy the licenses and such -->
<copy todir="${dist.dir}/share/doc/${ant.project.name}">
<fileset dir=".">
<include name="*.txt"/>
</fileset>
</copy>
<chmod perm="ugo+x" type="file">
<fileset dir="${dist.dir}/bin"/>
<fileset dir="${dist.dir}/sbin"/>
</chmod>
<!--package storage-handlers -->
<property name="handlers.dir" value="${dist.dir}/share/hcatalog/storage-handlers"/>
<mkdir dir="${handlers.dir}"/>
<ant target="package" dir="storage-handlers/hbase" inheritAll="false">
<property name="dist.handlers.dir" value="${handlers.dir}"/>
</ant>
<tar destfile="${build.dir}/${final.name}.tar.gz" longfile="gnu" compression="gzip">
<tarfileset dir="${build.dir}" filemode="755">
<include name="${final.name}/bin/**"/>
<include name="${final.name}/sbin/**"/>
</tarfileset>
<tarfileset dir="${build.dir}">
<include name="${final.name}/**"/>
<exclude name="${final.name}/bin/**"/>
<exclude name="${final.name}/sbin/**"/>
</tarfileset>
</tar>
<checksum file="${build.dir}/${final.name}.tar.gz" forceOverwrite="yes"/>
</target>
<target name="releaseaudit" depends="init" description="generate a release audit report">
<get src="${mvnrepo}/org/apache/rat/apache-rat/${apache-rat.version}/apache-rat-${apache-rat.version}.jar"
dest="${basedir}/build/apache-rat-${apache-rat.version}.jar"
usetimestamp="true"
skipexisting="true"/>
<java jar="${basedir}/build/apache-rat-${apache-rat.version}.jar"
fork="true"
output="${basedir}/build/releaseaudit_report.txt">
<arg value="--dir"/>
<arg value="${basedir}"/>
<arg value="--exclude-file"/>
<arg value="build-support/conf/rat-excludes.txt"/>
</java>
<echo message="releaseaudit report generated at ${basedir}/build/releaseaudit_report.txt"/>
</target>
<!-- ================================================================== -->
<!-- Make release tarball -->
<!-- ================================================================== -->
<target name="src-release" depends="clean" description="Source distribution">
<mkdir dir="${build.dir}"/>
<property name="src-release-tarball"
value="${build.dir}/${ant.project.name}-src-${hcatalog.version}.tar.gz"/>
<tar compression="gzip" longfile="gnu" destfile="${src-release-tarball}">
<tarfileset dir="${basedir}" mode="644" prefix="${ant.project.name}-src-${hcatalog.version}">
<include name="build-support/**"/>
<exclude name="build-support/scripts/**"/>
<include name="conf/**"/>
<include name="core/**"/>
<include name="hcatalog-pig-adapter/**"/>
<include name="server-extensions/**"/>
<include name="webhcat/**"/>
<include name="license/**"/>
<include name="src/**"/>
<include name="storage-handlers/**"/>
<include name="*.properties"/>
<include name="*.txt"/>
<include name="*.xml"/>
<include name="KEYS"/>
</tarfileset>
<tarfileset dir="${basedir}" mode="755" prefix="${ant.project.name}-src-${hcatalog.version}">
<include name="bin/**"/>
<include name="build-support/scripts/**"/>
<include name="scripts/**"/>
</tarfileset>
</tar>
<checksum file="${src-release-tarball}" forceOverwrite="yes"/>
</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="build-support/ant/checkstyle.xml"/>
<import file="build-support/ant/deploy.xml"/>
<import file="build-support/ant/findbugs.xml"/>
<import file="build-support/ant/test.xml"/>
<target name="make-pom" description="no-op in hcatalog, here to make hive's build work"/>
</project>