# 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.
#
##
# Properties that override Maven build defaults
#
# Note: To compile/jar under jdk 1.3 (to reproduce the math 1.1 release),
# additional properties in build.properties.sample need to be set.
# Settings below will compile with 1.3 source and target compiler settings
# but will use the jdk used to launch maven.
##

maven.repo.remote=http://repo1.maven.org/maven

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

maven.checkstyle.properties=${basedir}/checkstyle.xml
maven.checkstyle.header.file=${basedir}/license-header.txt
maven.xdoc.poweredby.image=maven-feather.png

#If you wish to skip tests when doing builds, uncomment
#maven.test.skip = true
#If you want the build to succeed if tests fail, uncomment
#maven.test.failure = false

maven.junit.fork=true
#maven.linkcheck.enable=true 

maven.xdoc.date=left
maven.xdoc.version=${pom.currentVersion}
maven.xdoc.developmentProcessUrl=http://commons.apache.org/charter.html
maven.docs.dest=${maven.build.dir}/site
maven.docs.src=${basedir}/src/site/xdoc

maven.javadoc.links = http://java.sun.com/j2se/1.4.2/docs/api/,\
                      http://commons.apache.org/collections/api/

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

# Jar Manifest Additional Attributes
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.jar.override = on
maven.jar.clover = 1.3.2
maven.compile.target=1.3
maven.compile.source=1.3

maven.announcement.file=${basedir}/RELEASE-NOTES.txt
maven.announcement.stylesheet.path=${basedir}/release-notes.jsl

######################################################################
# Deployment Repository Settings
#
# 'apache.releases' is the mirrored public release repository
# 'apache.snapshots' is the internal repository for snapshots
#
# By default, deployment is to the internal apache repository.
# To deploy to the mirrored distribution repository, use
#
#   maven -Dmaven.repo.list=apache.releases jar:deploy
#
# The following properties need to be set in local build.properties:
# 
#   maven.repo.apache.releases.username - apache user name (defaults to user.name)
#   maven.repo.apache.releases.privatekey - path to local private ssh key (defaults to ${user.home}/.ssh/id_dsa)
#   maven.repo.apache.releases.passphrase - passphrase for private ssh key (defaults to empty)
#
######################################################################
# Repository to deploy to - internal apache repo
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
maven.repo.apache.snapshots.username=${maven.repo.apache.username}
maven.repo.apache.snapshots.privatekey=${maven.repo.apache.privatekey}
maven.repo.apache.snapshots.passphrase=${maven.repo.apache.passphrase}
maven.repo.apache.snapshots.group=apcvs

# Release repository - rsynched to mirrors
maven.repo.apache.releases=scp://people.apache.org
maven.repo.apache.releases.directory=/www/www.apache.org/dist/java-repository
maven.repo.apache.releases.group=apcvs
#maven.repo.apache.releases.username=
#maven.repo.apache.releases.privatekey=
#maven.repo.apache.releases.passphrase=

###############################################################################
# properties to exclude extra images from site. Will be built in to xdoc plugin.
maven.xdoc.copy.excludes=images/file.gif,images/folder-closed.gif,images/folder-open.gif,images/icon_alert.gif,images/icon_alertsml.gif,images/icon_arrowfolder1_sml.gif,images/icon_arrowfolder2_sml.gif,images/icon_arrowmembers1_sml.gif,images/icon_arrowmembers2_sml.gif,images/icon_arrowusergroups1_sml.gif,images/icon_arrowusergroups2_sml.gif,images/icon_confirmsml.gif,images/icon_help_lrg.gif,images/icon_infosml.gif,images/icon_members_sml.gif,images/icon_sortleft.gif,images/icon_sortright.gif,images/icon_usergroups_sml.gif,images/icon_waste_lrg.gif,images/icon_waste_sml.gif,images/none.png,images/nw_maj.gif,images/nw_maj_hi.gif,images/nw_med.gif,images/nw_med_hi.gif,images/nw_med_rond.gif,images/nw_min.gif,images/nw_min_036.gif,images/nw_min_hi.gif,images/poweredby_036.gif,images/product_logo.gif,images/se_maj_rond.gif,images/sw_min.gif,images/logos/**
maven.xdoc.copy.excludes.classic=images/external-classic.png,images/help_logo.gif,images/icon_arrowfolderclosed1_sml.gif,images/icon_arrowwaste1_sml.gif,images/icon_arrowwaste2_sml.gif,images/icon_doc_lrg.gif,images/icon_doc_sml.gif,images/icon_error_lrg.gif,images/icon_folder_lrg.gif,images/icon_folder_sml.gif,images/icon_help_sml.gif,images/icon_info_lrg.gif,images/icon_members_lrg.gif,images/icon_sortdown.gif,images/icon_sortup.gif,images/icon_success_lrg.gif,images/icon_usergroups_lrg.gif,images/icon_arrowfolderopen2_sml.gif,images/icon_warning_lrg.gif,images/newwindow-classic.png,images/nw_maj_rond.gif,images/strich.gif,images/sw_maj_rond.gif,images/sw_med_rond.gif
