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

# local build.properties
#
# $Id$
#

# compile switches
compile.debug= true
compile.optimize= false
compile.deprecation= true
compile.encoding= utf-8
compile.source=1.5
compile.target=1.5

# project identification
project.name=VelocityTools
project.version=2.0.1-SNAPSHOT
project.libname=velocity-tools
project.id=${project.libname}-${project.version}

struts.name=VelocityTools
struts.libname=${project.libname}
struts.description=a set of utilities for use with the Velocity template engine and Struts web framework
struts.id=${struts.libname}-${project.version}

view.name=VelocityView
view.libname=${project.libname}-view
view.description=a set of utilities for use with the Velocity template engine
view.id=${view.libname}-${project.version}

generic.name=Velocity GenericTools
generic.libname=${project.libname}-generic
generic.description=a set of non-J2EE utilities for use with the Velocity template engine
generic.id=${generic.libname}-${project.version}

# source directories
source.home=${basedir}/src
examples.home=${basedir}/examples
conf.home=${source.home}/conf
classes.src=${source.home}/main/java
macros.src=${source.home}/velocity
docs.src=${basedir}/xdocs

# build directories
build.dir=${basedir}/build
mvn.build.dir=${basedir}/target
classes.dir=${build.dir}/classes
lib.dir=${basedir}/lib
dist.dir=${basedir}/dist
docs.dir=${basedir}/docs
release.dir=${dist.dir}/release/${project.id}

# distribution properties
publish.server=people.apache.org
publish.dir=~/public_html/velocity/tools/${project.version}
publish.docs.dir=/www/velocity.apache.org/tools/

# javadoc properties
javadoc.dir=${docs.dir}/javadoc
javadoc.title=${project.name} ${project.version} Documentation
javadoc.year=2003-2007
javadocs.ref.jsdk= http://java.sun.com/j2se/1.5.0/docs/api/

# test directories
test.dir=${basedir}/test
test.conf.dir=${test.dir}/conf
test.lib.dir=${test.dir}/lib
test.src.dir=${source.home}/test/java
test.build.dir=${build.dir}/test
test.build.src.dir=${test.build.dir}/src
test.classes.dir=${test.build.dir}/classes
test.rst.dir=${test.build.dir}/rst
test.log.dir=${test.build.dir}/log

# Needs to be configured with system location of findbugs for findbugs task
findbugs.home=*unset*

# Needs to be configured with system location of PMD for pmd task
pmd.home=*unset*

#test switches
test.haltonerror=true
test.haltonfailure=true
test.compile.source=1.5
test.compile.target=1.5

#test webcontainer parameters
test.webcontainer.port=8081
test.webcontainer.control.port=8082


# #######################################################################
#
# Downloading jars from ibiblio repository
#
# #######################################################################

# Settings for the proxy to use for download. Change this if you must
# use a proxy from your host. If the proxy.host property is unset, no
# proxy is used.
#
proxy.host=
proxy.port= 80

# We download directly from the ibiblio maven repository
#
#repo.m1.url=http://www.ibiblio.org/maven
repo.m1.url=http://mirrors.ibiblio.org/pub/mirrors/maven2
repo.m2.url=http://www.ibiblio.org/maven2

# Skip or force downloading of dependencies
skip.jar.loading= false
force.jar.loading= false

# Jars to be downloaded for compilation
#
jar.antlr.version= 2.7.2
jar.commons-beanutils.version= 1.7.0
jar.commons-chain.version= 1.1
jar.commons-collections.version= 3.2
jar.commons-digester.version= 1.8
jar.commons-lang.version= 2.2
jar.commons-logging.version= 1.1
jar.commons-validator.version= 1.3.1
jar.dom4j.version= 1.6.1
jar.jaxen.version= 1.1-beta-6
jar.oro.version= 2.0.8
jar.servletapi.version= 2.3
jar.sslext.version = 1.2-0
jar.struts-core.version = 1.3.8
jar.struts-taglib.version = 1.3.8
jar.struts-tiles.version = 1.3.8
jar.velocity.version= 1.6.4

# Jars to be downloaded for building documentation
#
jar.velocity-dvsl.version= 1.0

# Jars needed for testing
#
jar.httpunit.version=1.6.1
jar.jetty.version=6.0.1
jar.js.version = 1.6R5
jar.nekohtml.version=0.9.5
jar.xercesimpl.version=2.8.1
jar.xmlparserapis.version=2.6.2
jar.junit.version=4.1
jar.maven.ant.version=2.0.9

########################################################################
# Maven Ant Task settings
maven.pom=${basedir}/pom.xml
maven.build.dir= ${mvn.build.dir}
wagon-ssh.version=1.0-beta-2
# POM distributionManagement is used if this is not set
#maven.remote.repository=

# Full paths to the jars for building the examples
antlr.jar=${lib.dir}/antlr-${jar.antlr.version}.jar
commons-beanutils.jar=${lib.dir}/commons-beanutils-${jar.commons-beanutils.version}.jar
commons-chain.jar=${lib.dir}/commons-chain-${jar.commons-chain.version}.jar
commons-collections.jar=${lib.dir}/commons-collections-${jar.commons-collections.version}.jar
commons-digester.jar=${lib.dir}/commons-digester-${jar.commons-digester.version}.jar
commons-lang.jar=${lib.dir}/commons-lang-${jar.commons-lang.version}.jar
commons-logging.jar=${lib.dir}/commons-logging-${jar.commons-logging.version}.jar
commons-validator.jar=${lib.dir}/commons-validator-${jar.commons-validator.version}.jar
dom4j.jar=${lib.dir}/dom4j-${jar.dom4j.version}.jar
jaxen.jar=${lib.dir}/jaxen-${jar.jaxen.version}.jar
servlet.jar=${lib.dir}/servletapi-${jar.servletapi.version}.jar
struts-core.jar=${lib.dir}/struts-core-${jar.struts-core.version}.jar
struts-taglib.jar=${lib.dir}/struts-taglib-${jar.struts-taglib.version}.jar
struts-tiles.jar=${lib.dir}/struts-tiles-${jar.struts-tiles.version}.jar
sslext.jar=${lib.dir}/sslext-${jar.sslext.version}.jar
oro.jar=${lib.dir}/oro-${jar.oro.version}.jar
velocity.jar=${lib.dir}/velocity-${jar.velocity.version}.jar
