# -------------------------------------------------------------------
# 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-SNAPSHOT
release_date=January 11, 2006


# -------------------------------------------------------------------
#                Dependency Repositories
# -------------------------------------------------------------------
maven.repo.remote=\
http://www.ibiblio.org/maven,\
http://cvs.apache.org/repository/,\
http://www.apache.org/dist/java-repository/


# -------------------------------------------------------------------
#                Multiproject includes and excludes
# -------------------------------------------------------------------

optional.includes=

maven.multiproject.includes=\
modules/common/project.xml,\
modules/xml/project.xml,\
modules/adb/project.xml,\
modules/codegen/project.xml,\
modules/wsdl/project.xml,\
modules/core/project.xml,\
modules/addressing/project.xml,\
modules/tool/project.xml,\
modules/samples/project.xml,\
modules/security/project.xml,\
modules/integration/project.xml,\
modules/saaj/project.xml,\
modules/doom/project.xml,\
${optional.includes}

#maven.multiproject.excludes=modules/tool/project.xml

# -------------------------------------------------------------------
#                JUnit
# -------------------------------------------------------------------
maven.junit.jvmargs=-Xmx256m -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
