#  Licensed to the Apache Software Foundation (ASF) under one or more
#  contributor license agreements.  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.

######################################################################
# Apache Central Repository
######################################################################
maven.repo.central=www.apache.org
maven.repo.central.directory=/www/www.apache.org/dist/java-repository
maven.remote.group=apcvs
maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory

######################################################################
# JUnit Testing
######################################################################
maven.test.failure = false
maven.junit.fork=true
#maven.test.search.classdir=true
maven.junit.jvmargs=-Xmx128m
#maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config
maven.junit.sysproperties=org.xml.sax.driver
org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
#java.security.auth.login.config=applications/test/jaas.config


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

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

######################################################################
# 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/j2se/1.4.2/docs/api/,\
                    http://jackrabbit.apache.org/apidocs/,\
                    http://www.day.com/maven/jsr170/javadocs/jcr-1.0/
maven.javadoc.author=false
maven.javadoc.version=false

######################################################################
# Other opts
######################################################################
# uncomment the next line to work in offline mode (no jar download & no linkcheck)
#maven.mode.online=

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

maven.compile.source=1.4
maven.compile.target=1.4

maven.jarResources.basedir=src/java
maven.jar.excludes=**/package.html

# specifying additional remote repository for downloading dependencies 
# not available at www.ibiblio.org/maven/
maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/

######################################################################
# Site L&F
######################################################################
# maven.xdoc.jsl=
maven.xdoc.date=
maven.xdoc.poweredby.image=maven-feather.png
maven.xdoc.version=${pom.currentVersion}
maven.xdoc.developmentProcessUrl=http://jackrabbit.apache.org/
maven.changelog.range=60
maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory

######################################################################
# Site Deploy (into ../jackrabbit-site for checkout on jackrabbit.apache.org)
######################################################################
maven.site.deploy.method=fs
