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

# $Id$

# Repository base path
repository=${user.home}/.m2/repository

# The pathname of the "junit.jar" JAR file
junit.module=junit
junit.version=4.11
junit.home=${repository}/junit/${junit.module}/${junit.version}
junit.jar = ${junit.home}/${junit.module}-${junit.version}.jar

hamcrest.module=hamcrest-core
hamcrest.version=1.3
hamcrest.home=${repository}/org/hamcrest/${hamcrest.module}/${hamcrest.version}
hamcrest.jar=${hamcrest.home}/${hamcrest.module}-${hamcrest.version}.jar

# The name of this component
component.name = commons-codec

# The primary package name of this component
component.package = org.apache.commons.codec

# The title of this component
component.title = Encode/Decode Utilities

# The current version number of this component
component.version = 1.8-SNAPSHOT

# The name that is used to create the jar file
final.name = ${component.name}-${component.version}

# The base directory for compilation targets
build.home = target

# The base directory for component configuration files
conf.home = src/conf

# The base directory for distribution targets
dist.home = dist

# The base directory for distribution targets to published in compressed format
pub.home = pub

# The base directory for component sources
source.home = src/main/java

# The base directory for component resources
resources.home = src/main/resources

# The base directory for unit test sources
test.home = src/test/java

# Should Java compilations set the 'debug' compiler option?
compile.debug = true

# Should Java compilations set the 'deprecation' compiler option?
compile.deprecation = true

# Should Java compilations set the 'optimize' compiler option?
compile.optimize = true

# Whether to include the Ant run-time libraries in the classpath
compile.includeantruntime = false

# Encoding of source files.
compile.encoding = UTF-8

# Java version settings
compile.source = 1.6
compile.target = 1.6

# Should all tests fail if one does?
test.failonerror = true

# The test runner to execute
test.runner = junit.textui.TestRunner
