# 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 
maven.checkstyle.header.file=${basedir}/license-header.txt

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

