# 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
# $Id$
######################################################################
maven.repo.remote=http://repo1.maven.org/maven

maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
maven.changes.issue.template=%URL%/browse/%ISSUE% 
maven.changelog.range=365

maven.compile.source=1.3
maven.compile.target=1.3

######################################################################
# Apache Central Repository
######################################################################

#maven.repo.central=www.apache.org
#maven.repo.central.directory=/www/www.apache.org/dist/java-repository
#maven.remote.group=apcvs

######################################################################
# 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}


######################################################################
# JUnit Testing
######################################################################
maven.test.failure = false
maven.junit.fork=true

#If you wish to skip tests when doing builds, uncomment
#maven.test.skip = true



######################################################################
# commons site L&F
######################################################################
maven.xdoc.date=left
maven.xdoc.poweredby.image=maven-feather.png
maven.xdoc.version=${pom.currentVersion}
maven.xdoc.developmentProcessUrl=http://commons.apache.org/charter.html
#maven.xdoc.includeProjectDocumentation=no


# once we create a theme url it should go here.
#maven.xdoc.theme.url=????



######################################################################
# Checkstyle
######################################################################
maven.checkstyle.properties = checkstyle.xml
maven.linkcheck.enable=false 

######################################################################
# Make the source distro unzip to a different directory
######################################################################
maven.dist.src.assembly.dir=${maven.dist.assembly.dir}/src/${maven.final.name}-src


######################################################################
# JavaDoc
#
# javadoc urls can be added here, multiple urls are appended using a comma
#
# maven.javadoc.links = http://foo/bar/api,\
#                       http://flim/flam/api/
######################################################################
maven.javadoc.links=http://java.sun.com/products/j2se/1.4/docs/api


compile.debug = on
compile.optimize = off
compile.deprecation = off


# -------------------------------------------------------------------
# Default Maven properties for the SDOCBOOK plugin
# -------------------------------------------------------------------

maven.sdocbook.src.dir = ${basedir}/sdocbook

maven.sdocbook.generated.html = ${maven.build.dir}/generated-docbooks/html
maven.sdocbook.generated.fo = ${maven.build.dir}/generated-docbooks/fo
maven.sdocbook.generated.pdf = ${maven.build.dir}/generated-docbooks/pdf

maven.sdocbook.target.dir = ${maven.build.dir}/docs/docbook

# the root dir of the stylesheet to use (defaults to plugin-internal version)
maven.sdocbook.stylesheets.dir = ${plugin.dir}/plugin-resources

# the resources which are to be copied from maven.sdocbook.src.dir
maven.sdocbook.resources.include = **/*.png, **/*.gif

# can be set to the "-param ..." which user can use to parameterize the html stylesheets
maven.sdocbook.html.params =

# can be set to the "-param ..." which user can use to parameterize the fo stylesheets
maven.sdocbook.fo.params =


# set this to true if you want to use xml-commons-resolver for resolving the dtd elements
maven.sdocbook.use.entityresolver=false

# Set to point to configuration file of xml-commons-resolver
# (NOTE: if you set "maven.sdocbook.use.entityresolver" to true, you must set this too)
maven.sdocbook.catalogmanager.properties=

