# -------------------------------------------------------------------
# P R O J E C T  P R O P E R T I E S
#
# $Id$
#
# Do not change this file. Please use build.properties in this directory
# to do site or installation specific changes to the project build.
# -------------------------------------------------------------------
maven.repo.remote=http://www.ibiblio.org/maven/,http://cvs.apache.org/repository/

#keep ant & maven directories separate.
maven.build.dir=m-target

maven.checkstyle.properties = conf/qa/CheckStyle.xml

# display the date on the site
maven.xdoc.date = left
# Display the version the web site is documenting
maven.xdoc.version = ${pom.currentVersion}
# Days to report in the change log
maven.changelog.range=30

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

# -------------------------------------------------------------------
# D E P L O Y M E N T  P R O P E R T I E S
# -------------------------------------------------------------------
#- maven.repo.central and maven.repo.central.directory are used to deploy
#- jars to be used by other projects.  
#
#- For nightly builds, use:
#-    maven jar:deploy-snapshot 
#- This will deploy to the 'default' directory, which corresponds to the "remote" repository
#-  http://cvs.apache.org/repository/
#- For production builds, use:
#-    maven -Dmaven.repo.central.directory=/www/www.apache.org/dist/java-repository/ jar:deploy
#- That directory is periodically mirrored with the "standard" Maven repo at ibiblio
#- Specify your username at the remote repository (cvs.apache.org) 
#- with the maven property 'maven.username'
maven.repo.central=cvs.apache.org
maven.repo.central.directory=/www/cvs.apache.org/repository/ # nightly builds
#maven.repo.central.directory=/www/www.apache.org/dist/java-repository/ # releases

# -------------------------------------------------------------------
# X D O C   P R O P E R T I E S
# -------------------------------------------------------------------
#maven.xdoc.includeProjectDocumentation=no
#Comment out the following line to use the standard Maven stylesheet
maven.xdoc.jsl=struts.jsl
# Links to Struts Development Process doc instead of Maven default doc
maven.xdoc.developmentProcessUrl=/releases.html

#Powered By logo 
#maven.xdoc.poweredby.image=struts-power.gif
#maven.xdoc.poweredby.title=Powered by Struts
#maven.xdoc.poweredby.url=http://jakarta.apache.org/struts/
maven.xdoc.poweredby.image=
maven.xdoc.poweredby.title=
maven.xdoc.poweredby.url=

maven.ui.banner.background=#ffffff
maven.ui.banner.foreground=#000000
maven.ui.banner.border.top=#ffffff
maven.ui.banner.border.bottom=#ffffff

maven.ui.navcol.background=#ffffff
maven.ui.navcol.border.top=#ffffff
maven.ui.navcol.border.right=#ffffff
maven.ui.navcol.border.bottom=#ffffff

maven.ui.breadcrumbs.background=#ffffff
maven.ui.breadcrumbs.foreground=#666666
maven.ui.breadcrumbs.border.top=#ffffff
maven.ui.breadcrumbs.border.bottom=#000000


# -------------------------------------------------------------------
# C A C T U S   P L U G - I N   P R O P E R T I E S
# -------------------------------------------------------------------
cactus.src.dir = src/test
cactus.src.includes = org/apache/struts/action/TestActionServlet.java,org/apache/struts/taglib/**/Test*.java

## Cactus Plug-in: Tomcat 4 specific 
# cactus.tomcat4x.config (optional)
# Location of the Tomcat 4.x configuration file if you don't want to use the cactus-provided one.
# cactus.tomcat4x.conf.dir (optional)
# Location of custom Tomcat 4.x configuration file that will be copied, overwriting the Cactus-provided configuration files.
cactus.tomcat4x.conf.dir = conf/test/tomcat41
# cactus.tomcat4x.conf.includes (optional)
# Configuration files located at${cactus.tomcat4x.conf.dir that should be included in the Tomcat 4.x container set up by Cactus.
# cactus.tomcat4x.conf.excludes (optional)
# Configuration files located at${cactus.tomcat4x.conf.dir that should not be included in the Tomcat 4.x container set up by Cactus.
# cactus.tomcat4x.tmpdir (optional)
# Directory to which the container will be installed for the tests. By default the system temporary directory is used.

# -------------------------------------------------------------------
# A P A C H E  R E P O S I T O R Y  P R O P E R T I E S
# -------------------------------------------------------------------
#This is the host that Maven will attempt
#to deploy the distribution to during a dist:deploy. 	
maven.repo.central=minotaur.apache.org	

#This is the directory that Maven will
#copy the distribution to during a dist:deploy. 	

maven.repo.central.directory=/www/www.apache.org/dist/java-repository

# Because the repository user name is different for each person, it should not
# be defined in the shared "project.properties"  
# Define this on the command line, or in your own build.properties file:
# in order to deploy to the repository:
#ssh configuration settings just require your apache id to log on with
#maven.username=<apache-user-name> (DON'T UNCOMMENT THIS LINE IN SHARED project.propert

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


