#
# 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.compile.source=1.3
maven.compile.target=1.3

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

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

# Repository to deploy to
maven.repo.list=apache.snapshots

maven.repo.apache.releases=scp://people.apache.org
maven.repo.apache.releases.directory=/www/www.apache.org/dist/java-repository
# These must be set elsewhere
#maven.repo.apache.releases.username=
#maven.repo.apache.releases.privatekey=
#maven.repo.apache.releases.passphrase=

# Repository to deploy snapshots
maven.repo.apache.snapshots=scp://cvs.apache.org
maven.repo.apache.snapshots.directory=/www/cvs.apache.org/repository
maven.repo.apache.snapshots.username=${maven.repo.apache.releases.username}
maven.repo.apache.snapshots.privatekey=${maven.repo.apache.releases.privatekey}
maven.repo.apache.snapshots.passphrase=${maven.repo.apache.releases.passphrase}

maven.scm.svn.tag.base=https://svn.apache.org/repos/asf/jakarta/commons/proper/jelly/tags

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