# -------------------------------------------------------------------
# Copyright 2001-2006 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
# -------------------------------------------------------------------
version_number=0.95
version_affix=SNAPSHOT
#axis2_version=${version_number}
#addressing_version=${version_number}
#security_version=${version_number}
axis2_version=${version_number}-${version_affix}
addressing_version=${version_number}-${version_affix}
security_version=${version_number}-${version_affix}

# -------------------------------------------------------------------
#                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/


# -------------------------------------------------------------------
#                Multiproject includes and excludes
# -------------------------------------------------------------------

optional.includes=

maven.multiproject.includes=\
modules/common/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
maven.compile.target=1.4
maven.compile.source=1.4

# -------------------------------------------------------------------
#                Versions of dependencies
# -------------------------------------------------------------------
#for JAM
annogen.version=0.1.0
ant.version=1.6.5
axiom.version=0.95
axis.wsdl4j.version=1.2
backport_util_concurrent.version=2.0_01_pd
bcprov.version=jdk13-131
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.groupid=geronimo-spec
geronimo.spec.activation.artifactid=geronimo-spec-activation
geronimo.spec.activation.version=1.0.2-rc4
geronimo.spec.javamail.artifactid=geronimo-spec-javamail
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
jaxme.version=0.5.1
junit.version=3.8.1
log4j.version=1.2.13
maven.itest.plugin.version=1.0
opensaml.version=1.0.1
policy.version=1.0
stax.api.version=1.0
stax.impl.groupid=woodstox
stax.impl.artifactid=wstx
stax.impl.version=asl-2.8.2
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
#once there is a version of XmlSchema-1.0 in the maven1 repository,
#there's no need for a different version in m2-land
XmlSchema.m2.version=1.0
xmlsec.version=1.2.1
xmlunit.version=1.0
tracer.version=SNAPSHOT


#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
