#
# 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.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://commons.apache.org/charter.html
maven.xdoc.poweredby.image=maven-feather.png

# maven.xdoc.jsl=file:${basedir}/../../../commons-build/commons-site.jsl

# this only works with xdoc-plugin-1.10, do NOT include ${basedir} here!
maven.xdoc.theme.file=../../xdocs/style/project.css
maven.xdoc.distributionUrl=http://www.apache.org/dist/java-repository/commons-jelly/jars

maven.linkcheck.enable=false

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

# Repositories to upload by default... snapshots
maven.repo.list=apache.snapshots

# Repository to deploy snapshots
maven.repo.apache.snapshots=scp://people.apache.org
maven.repo.apache.snapshots.directory=/www/people.apache.org/repository
## supposing these variables (*.releases.* are defined at the user-level)
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}

# Repository to deploy releases, need manual addressing
maven.repo.apache.releases=scp://people.apache.org
maven.repo.apache.releases.directory=/www/www.apache.org/dist/java-repository

maven.announcement.lenient=true
maven.jellydoc.packages=org.apache.commons.jelly.tags.*