#
# 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.deprecation = on

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

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

maven.license.licenseFile=${basedir}/../../LICENSE.txt

maven.xdoc.date=left
maven.xdoc.developmentProcessUrl=http://jakarta.apache.org/commons/charter.html
maven.xdoc.poweredby.image=maven-feather.png

maven.xdoc.jsl=file:${basedir}/../../../commons-build/commons-site.jsl
maven.xdoc.distributionUrl=http://www.apache.org/dist/java-repository/commons-jelly/jars

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