# 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.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/,\
                      http://commons.apache.org/discovery/apidocs/

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
