#   Copyright 2003-2004 The Apache Software Foundation
#
#   Licensed 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.


# You can uncomment this if you're willing to use the unofficial
# Validator-specific jar repository at the Validator site. This will
# contain all the jars needed to build Validator, even if a jar
# is missing on ibiblio

#maven.repo.remote=http://www.ibiblio.org/maven/,http://jakarta.apache.org/commons/validator/repo

maven.checkstyle.properties = conf/share/ValidatorCheckStyle.xml

# Keep ant and maven directories seperate.
maven.build.dir=m-target

# Include legacy javadoc in build
maven.html2xdoc.dir = legacy

# commons site L&F
maven.xdoc.jsl=../commons-build/commons-site.jsl
maven.xdoc.poweredby.image=
maven.xdoc.date = left
maven.xdoc.version = ${pom.currentVersion}

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

#maven.test.skip = true
#maven.test.failure.ignore = true
maven.changelog.range = 120

# -------------------------------------------------------------------
# N I G H T L Y   B U I L D   P R O P E R T I E S
# -------------------------------------------------------------------

validator.nightly.dist.dir = \
    /www/jakarta.apache.org/builds/jakarta-commons/validator/nightly