# 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.
# -------------------------------------------------------------------
# REPOS
# -------------------------------------------------------------------
maven.repo.remote=http://ibiblio.org/maven,http://repository.codehaus.org/org/codehaus/mojo/,http://maven-plugins.sourceforge.net,http://maven-plugins.sourceforge.net/repository/maven-plugins/,http://repo1.maven.org/maven

maven.repo.list=apache
maven.repo.apache=scp://people.apache.org
maven.repo.apache.directory=/www/people.apache.org/repo/m1-ibiblio-rsync-repository

# -------------------------------------------------------------------
# XDOC
# -------------------------------------------------------------------
maven.xdoc.date = left

# -------------------------------------------------------------------
# Compilation options
# -------------------------------------------------------------------
maven.compile.source = 1.4
maven.compile.target = 1.4

# Add information on compilation options to the Manifest
maven.jar.manifest.attributes.list=X-Compile-Source-JDK,X-Compile-Target-JDK
maven.jar.manifest.attribute.X-Compile-Source-JDK=${maven.compile.source}
maven.jar.manifest.attribute.X-Compile-Target-JDK=${maven.compile.target}

# -------------------------------------------------------------------
# TEST
# -------------------------------------------------------------------
maven.test.callback.pre-test.buildFile = build.xml
maven.test.callback.pre-test.buildTarget = jcs:test-prepare

# this only include *UnitTest.java by default
# this allows us to keep performance tests out of jcoverage,
# since instrumented perf tests will always fail.
test=Unit

maven.core.callback.post-compile.buildFile = build.xml
maven.core.callback.post-compile.buildTarget = jcs:copy-classpath-vm

# -------------------------------------------------------------------
# JUNIT
# -------------------------------------------------------------------
maven.junit.fork = true
# I'm setting this for jcoverage.
# maven.test.failure.ignore=true
maven.jcoverage.junit.fork = true
maven.junit.sysproperties=java.security.policy
java.security.policy=${basedir}/src/conf/cache.policy
maven.junit.jvmargs=-Xmx256m

# -------------------------------------------------------------------
# Cobertura
# -------------------------------------------------------------------
maven.cobertura.datafile=${basedir}/cobertura.ser

# -------------------------------------------------------------------
# C H E C K S T Y L E  P R O P E R T I E S
# -------------------------------------------------------------------
maven.checkstyle.properties = ${basedir}/checkstyle.xml

# -------------------------------------------------------------------
# C H A N G E L O G  P R O P E R T I E S
# -------------------------------------------------------------------
maven.changelog.range=360
maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory

# -------------------------------------------------------------------
# L I C E N S E  P R O P E R T I E S
# -------------------------------------------------------------------
maven.license.licenseFile = ${basedir}/LICENSE.txt

# -------------------------------------------------------------------
# C H A N G E S  P R O P E R T I E S
# -------------------------------------------------------------------
maven.changes.issue.template = http://issues.apache.org/jira/browse/%ISSUE%

# -------------------------------------------------------------------
# X D O C  P R O P E R T I E S
# -------------------------------------------------------------------
# display the date on the site
maven.xdoc.date = left
maven.xdoc.locale.default = en
