# 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 used by forrest.build.xml for building the website
##############
project.name=forrest-docu

#project.skin=Don't specify a skin for Forrest, we will always use the 
#             default one defined in main/webapp/default-forrest.properties
project.content-dir=content
project.xdocs-dir=${project.content-dir}/authoring
project.raw-content-dir=${project.content-dir}
project.resources-dir=resources
#project.configfile=${project.home}/conf/cli.xconf
#project.skinconf=${project.content-dir}/skinconf.xml

project.bugtracking-url=http://issues.apache.org/jira/browse/
project.issues-rss-url=http://issues.apache.org/jira/secure/IssueNavigator.jspa?view=rss&pid=12310000&fixfor=12310040&resolutionIds=-1&sorter/field=priority&sorter/order=DESC&tempMax=25&reset=true&decorator=none

# The URL to start crawling from
#project.start-uri=linkmap.html

# The names of plugins that are required to build the project
# comma separated list (no spaces)
# Run "forrest available-plugins" for a list of plug-ins currently available
project.required.plugins=org.apache.forrest.plugin.internal.dispatcher,org.apache.forrest.themes.core,org.apache.forrest.plugin.input.Lenya

# Max memory to allocate to Java
# FIXME: See issue FOR-572
forrest.maxmemory=128m

forrest.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
