#
# 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.checkstyle.properties=checkstyle.xml
maven.junit.fork=true

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-feather.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.source=1.3

# This links to the current stable version. We could have LANG_CURRENT, but this 
# is simpler to manage at the moment.
maven.jdiff.old.tag=LANG_2_0

# Generate class files for specific VM version (e.g., 1.1 or 1.2). 
# Note that the default value depends on the JVM that is running Ant. 
# In particular, if you use JDK 1.4+ the generated classes will not be usable
# for a 1.1 Java VM unless you explicitly set this attribute to the value 1.1 
# (which is the default value for JDK 1.1 to 1.3).
maven.compile.target = 1.1

# 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

maven.jar.override=on
maven.jar.clover=1.3.2
maven.clover.license.path=clover.license
# remove the next property when the text package is released
maven.clover.excludes=org/apache/commons/text/**/*.java
