#
# 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.
#
# -------------------------------------------------------------------
# P R O J E C T  P R O P E R T I E S
# -------------------------------------------------------------------
maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory

maven.compile.source=1.3
maven.compile.target=1.3

# Jar Manifest and Additional Attributes
maven.jar.manifest=conf/MANIFEST.MF
maven.jar.manifest.attributes.list=Implementation-Vendor-Id,X-Compile-Source-JDK,X-Compile-Target-JDK
maven.jar.manifest.attribute.Implementation-Vendor-Id=org.apache
maven.jar.manifest.attribute.X-Compile-Source-JDK=${maven.compile.source}
maven.jar.manifest.attribute.X-Compile-Target-JDK=${maven.compile.target}

maven.xdoc.date=left
maven.xdoc.version=${pom.currentVersion}
maven.xdoc.developmentProcessUrl=http://commons.apache.org/charter.html
maven.xdoc.poweredby.image=maven-feather.png
maven.xdoc.distributionUrl=http://repo1.maven.org/maven/commons-configuration/jars

maven.repo.remote=http://repo1.maven.org/maven,http://maven-plugins.sourceforge.net/maven,http://dist.codehaus.org
maven.remote.group=apcvs

compile.debug = on
compile.optimize = off
compile.deprecation = off

maven.checkstyle.properties=conf/checkstyle.xml
maven.checkstyle.check.tests=false
maven.pmd.excludes=**/*PropertyListParser*

maven.junit.fork=true
maven.test.failure.ignore=false
maven.test.skip=false

maven.javadoc.links=http://java.sun.com/j2se/1.5/docs/api/, http://java.sun.com/j2ee/1.4/docs/api/, http://commons.apache.org/collections/apidocs/, http://commons.apache.org/digester/apidocs/, http://commons.apache.org/lang/apidocs/, http://commons.apache.org/beanutils/apidocs/

#cactus settings.  Make sure to point to your Tomcat!
cactus.home.tomcat4x = c:/java/tomcat
cactus.src.mergewebxml=src/test-cactus/testapp/WEB-INF/web.xml

maven.jar.override=on
maven.jar.resources=conf/resources.jar

maven.dist.src.assembly.dir=${maven.dist.assembly.dir}/src/${maven.final.name}-src

maven.compile.fork = true

maven.javacc.javacc.grammar=src/java/org/apache/commons/configuration/plist/PropertyListParser.jj

maven.jdiff.new.tag=CURRENT
maven.jdiff.old.tag=CONFIGURATION_1_5

maven.findbugs.excludeFilter=conf/findbugs-exclude-filter.xml

