# 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.3
maven.compile.target = 1.3

# 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

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