#
# Copyright 2002-2005 The Apache Software Foundation.
# 
# Licensed 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$

maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory

maven.repo.central=www.apache.org
maven.repo.central.directory=/www/www.apache.org/dist/java-repository
maven.remote.group=apcvs

# For a description of maven.changes.issue.template
# See http://maven.apache.org/reference/plugins/changes/properties.html
maven.changes.issue.template=%URL%/show_bug.cgi?id=%ISSUE%

maven.checkstyle.properties=${basedir}/checkstyle.xml
maven.test.failure = false
maven.junit.fork=true
maven.linkcheck.enable=false

maven.xdoc.jsl=../commons-build/commons-site.jsl
maven.xdoc.date=left
maven.xdoc.version=${pom.currentVersion}
maven.xdoc.developmentProcessUrl=http://jakarta.apache.org/commons/charter.html
maven.xdoc.poweredby.image=maven-button-1.png

# The Sun Javadoc for versions prior to 1.3 are off-line.
maven.javadoc.links=http://java.sun.com/j2se/1.3/docs/api/
maven.javadoc.overview=${basedir}/src/java/org/apache/commons/codec/overview.html
maven.javadoc.package=true

maven.jar.manifest=${basedir}/src/conf/MANIFEST.MF

maven.jdiff.old.tag = CODEC_1_2
#maven.jdiff.new.tag = HEAD
#maven.jdiff.new.tag = CODEC_1_3_RC1
maven.jdiff.new.tag = CODEC_1_3

maven.announcement.file=${maven.build.dir}/RELEASE-NOTES.txt

# Specifies the source version for the Java compiler.
# Corresponds to the source attribute for the ant javac task. 
# Valid values are 1.3, 1.4, 1.5. 
maven.compile.source = 1.3
