# -------------------------------------------------------------------
# Copyright 2001-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.
# -------------------------------------------------------------------


# -------------------------------------------------------------------
#                Project Information
# -------------------------------------------------------------------
axis2_version=0.94

# -------------------------------------------------------------------
#                Dependency Repositories
# -------------------------------------------------------------------
maven.repo.remote=\
http://www.ibiblio.org/maven,\
http://cvs.apache.org/repository/,\
http://www.apache.org/dist/java-repository/,\
http://www.openejb.org/maven,\
http://dist.codehaus.org,\
http://mirrors.sunsite.dk/maven/,\
http://people.apache.org/~dims/maven/


# -------------------------------------------------------------------
#                Multiproject includes and excludes
# -------------------------------------------------------------------

optional.includes=

maven.multiproject.includes=\
modules/core/project.xml,\
modules/common/project.xml,\
modules/xml/project.xml,\
modules/wsdl/project.xml,\
modules/adb/project.xml,\
${optional.includes}

# -------------------------------------------------------------------
#                JUnit
# -------------------------------------------------------------------
maven.junit.jvmargs=-Djava.awt.headless=true
maven.junit.fork=true

# -------------------------------------------------------------------
#                Compile
# -------------------------------------------------------------------
maven.compile.optimize=false
maven.compile.fork=true

# -------------------------------------------------------------------
#                Versions of dependencies
# -------------------------------------------------------------------
ant.version=1.6.5
axis.wsdl4j.version=1.2
backport_util_concurrent.version=2.0_01_pd
bcprov.version=jdk13-128
commons.codec.version=1.3
commons.discovery.version=0.2
commons.fileupload.version=1.0
commons.httpclient.version=3.0
commons.logging.version=1.0.4
geronimo.spec.activation.version=1.0.2-rc4
geronimo.spec.javamail.version=1.3.1-rc5
geronimo.spec.jms.version=1.1-rc4
geronimo.spec.servlet.version=2.4-rc4
servletapi.version=2.3
groovy.all.version=1.0-jsr-01
jaxen.version=1.1-beta-7
junit.version=3.8.1
log4j.version=1.2.12
maven.itest.plugin.version=1.0
opensaml.version=1.0.1
stax.api.version=1.0
stax.impl.groupid=woodstox
stax.impl.artifactid=wstx
stax.impl.version=asl-2.8.1
wss4j.version=SNAPSHOT
xalan.version=2.6.0
xbean.version=2.1.0
xerces.version=2.7.1
xml_apis.version=1.3.02
XmlSchema.version=SNAPSHOT
xmlsec.version=1.2.1
xmlunit.version=1.0
ws_policy.version=SNAPSHOT

#for JAM
annogen.version=0.1.0

#stax.impl.groupid=stax
#stax.impl.artifactid=stax
#stax.impl.version=1.1.2-dev

# -------------------------------------------------------------------
#                Clover
# -------------------------------------------------------------------
maven.clover.build = ${maven.build.dir}
#maven.clover.includes=**/org/apache/**.java
maven.clover.excludes=sample/**/*.java,userguide/**/*.java, test/**/*.java
maven.clover.license.path=clover.license

# -------------------------------------------------------------------
#                xdoc
# -------------------------------------------------------------------
maven.xdoc.date=left
maven.xdoc.version=${pom.currentVersion}
maven.xdoc.includeProjectDocumentation=no
maven.html2xdoc.enabled=false
maven.html2xdoc.dir=./xdocs
maven.pdf.navigationFile=navigation-pdf.xml
maven.allreports.disable=true

