# 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.

hive.version=0.14.0-SNAPSHOT
hcatalog.version=${hive.version}
jar.name=${ant.project.name}-${hcatalog.version}.jar
hcatalog.jar=${ant.project.name}-${hcatalog.version}.jar
hcatalog.core.jar=${ant.project.name}-core-${hcatalog.version}.jar
final.name=${ant.project.name}-${hcatalog.version}
package.release=1

build.dir=${basedir}/build
build.classes=${build.dir}/classes
src.dir=${basedir}/src/java
package.dir=${basedir}/src/packages
docs.src=${basedir}/src/docs
build.docs=${build.dir}/docs
build.javadoc=${build.docs}/api
dist.dir=${build.dir}/${final.name}

test.data.dir=${build.dir}/data
test.dir=${build.dir}/test
test.classes=${test.dir}/classes
test.logs=${test.dir}/logs
test.timeout=2700000
test.warehouse.dir=${test.dir}/hcat_junit_warehouse
mvnrepo=http://repo2.maven.org/maven2
test.src.dir=${basedir}/src/test
test.junit.output.format=xml
test.output=no
test.excludes=e2e/**
clover.jar=${clover.home}/lib/clover.jar
clover.db.dir=${build.dir}/test/clover/db
clover.report.dir=${build.dir}/test/clover/reports
clover.pdf.report.dir=${build.dir}/test/clover/pdf/reports

# junit jvm args
junit.jvm.args=-XX:-UseSplitVerifier -XX:+CMSClassUnloadingEnabled

apache-rat.version=0.8

findbugs.out.dir=${test.dir}/findbugs
findbugs.exclude.file=${basedir}/src/test/findbugsExcludeFile.xml
findbugs.report.htmlfile=${findbugs.out.dir}/hcat-findbugs-report.html
findbugs.report.xmlfile=${findbugs.out.dir}/hcat-findbugs-report.xml

build.encoding=UTF8
excludes=
javac.debug=on
javac.optimize=on
javac.deprecation=off
javac.args=
javac.args.warnings=


###############################################################################
# deploy properties
#
# "Maven Ant Tasks" are used to publish artifacts to maven repositories. This
# means your ~/.m2/settings.xml file must contain the appropriate credentials
# matching the mvn.deploy.repo.id you choose to publish to.
#
# <settings>
#   <servers>
#     <server>
#       <id>apache.snapshots.https</id>
#       <username>travis</username>
#       <password>mypassword</password>
#     </server>
#   </servers>
# </settings>

mvn.deploy.repo.id=apache.snapshots.https
mvn.deploy.repo.url=https://repository.apache.org/content/repositories/snapshots
maven-ant-tasks.version=2.1.3
mvn.local.repo=${user.home}/.m2/repository

