#
# Copyright 2002,2004 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.
#

# -------------------------------------------------------------------
# P R O J E C T  P R O P E R T I E S
# -------------------------------------------------------------------

maven.junit.fork=true
maven.compile.fork=true

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

maven.junit.usefile = true

# copied from maven test plugin due to a bug/caching issue
maven.test.dest = ${maven.build.dir}/test-classes
 
# Installation dir
maven.dist.install.dir = /usr/local/jelly

maven.changes.issue.template=http://issues.apache.org/jira/browse/%ISSUE%

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
maven.xdoc.distributionUrl=http://www.apache.org/dist/java-repository/commons-jelly/jars

apache.cvs=pserver:anoncvs@cvs.apache.org:/home/cvspublic

maven.multiproject.excludes=project.xml
maven.multiproject.includes=jelly-tags/*/project.xml
maven.multiproject.navigation=independent

maven.linkcheck.enable=false

maven.checkstyle.properties=jelly-tags/tag-checkstyle.xml
maven.checkstyle.header.file=${basedir}/short-license.txt
maven.license.licenseFile=${basedir}/LICENSE.txt

maven.pmd.rulesetfiles=\
  rulesets/basic.xml,\
  rulesets/unusedcode.xml,\
  rulesets/imports.xml,\
  rulesets/codesize.xml,\
  rulesets/coupling.xml,\
  rulesets/design.xml,\
  rulesets/strings.xml
