#  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.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/
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

# Location of the generated query language parsers. Needed for
# the Maven Eclipse plugin to automatically locate the generated
# source files. Note that this value matches the hardcoded path
# in the Maven JavaCC plugin. Therefore, do not change this value!
maven.gen.src=${maven.build.dir}/generated-src/main

# specifying additional remote repository for downloading dependencies 
# not available at www.ibiblio.org/maven/
maven.repo.remote = http://www.ibiblio.org/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

# ------------------------------------------------------------------------
# M A V E N  J A R  O V E R R I D E
# ------------------------------------------------------------------------
#maven.jar.override = on
#maven.jar.jcr = ${basedir}/lib/jcr.jar

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