#   Licensed to the Apache Software Foundation (ASF) under one or more
#   contributor license agreements.  See the NOTICE file distributed with
#   this work for additional information regarding copyright ownership.
#   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.

axiom.dir=http://people.apache.org/~jmsnell
axiom.api.jar=axiom-api-1.2.5.jar
axiom.impl.jar=axiom-impl-1.2.5.jar

jaxen.dir=http://dist.codehaus.org/jaxen/jars
jaxen.jar=jaxen-1.1.1.jar

log4j.dir=http://www.apache.org/dist/java-repository/log4j/jars
log4j.jar=log4j-1.2.14.jar

stax.dir=http://dist.codehaus.org/stax/jars
stax.api.jar=stax-api-1.0.1.jar

wstx.dir=http://woodstox.codehaus.org/3.2.1
wstx.jar=wstx-asl-3.2.1.jar

commons.logging.dir=http://www.apache.org/dist/java-repository/commons-logging/jars
commons.logging.jar=commons-logging-1.0.4.jar

commons.codec.dir=http://www.apache.org/dist/java-repository/commons-codec/jars
commons.codec.jar=commons-codec-1.3.jar

commons.httpclient.dir=http://www.apache.org/dist/java-repository/commons-httpclient/jars
commons.httpclient.jar=commons-httpclient-3.1.jar

#### Required for build ####
junit.dir=http://www.ibiblio.org/maven/junit/jars
junit.jar=junit-4.3.jar

#### Required for build ####
geronimo.activation.dir=http://www.apache.org/dist/java-repository/org.apache.geronimo.specs/jars
geronimo.activation.jar=geronimo-activation_1.0.2_spec-1.1.jar
geronimo.servlet.dir=http://www.apache.org/dist/java-repository/org.apache.geronimo.specs/jars
geronimo.servlet.jar=geronimo-servlet_2.4_spec-1.0.jar

#### Required for build ####
javamail.dir=https://maven-repository.dev.java.net/nonav/repository/javax.mail/jars/
javamail.jar=mail-1.4.1.jar

#### Required for build and JDK 1.4.2 support ####
retroweaver.version=2.0
retroweaver.dir=http://people.apache.org/~jmsnell
retroweaver.zip=retroweaver-2.0.zip

#### Optional for Security support ####
xmlsecurity.dir=http://people.apache.org/~jmsnell
xmlsecurity.jar=xmlsec-1.4.1.jar
bouncycastle.dir=http://www.bouncycastle.org/download
bouncycastle.jar=bcprov-jdk15-137.jar
bouncycastle.jar.retro=bcprov-jdk14-137.jar
bouncycastle.provider=org.bouncycastle.jce.provider.BouncyCastleProvider

#### Needed only for build and testing ####
jetty.dir=http://people.apache.org/~jmsnell
jetty.jar=jetty-6.1.3.jar
jetty-util.dir=http://people.apache.org/~jmsnell
jetty-util.jar=jetty-util-6.1.3.jar

#### Optional for Spring integration ####
spring.dir=http://downloads.sourceforge.net/springframework
spring.zip=spring-framework-2.0.6.zip
spring.name=spring-framework-2.0.6

#### Optional for HTML parsing support ####
htmlparser.zip=http://about.validator.nu/htmlparser/htmlparser-1.0.5.zip
htmlparser.dir=http://people.apache.org/~jmsnell
htmlparser.jar=htmlparser-1.0.5.jar
htmlserializer.jar=serializer.jar

#### Required for tests ####
easymock.dir=http://repo1.maven.org/maven2/org/easymock/easymock/2.3/
easymock.jar=easymock-2.3.jar
easymockclassextension.dir=http://repo1.maven.org/maven2/org/easymock/easymockclassextension/2.3/
easymockclassextension.jar=easymockclassextension-2.3.jar
cglib.dir=http://repo1.maven.org/maven2/cglib/cglib-nodep/2.1_3/
cglib.jar=cglib-nodep-2.1_3.jar

xmlunit.dir=http://mirrors.ibiblio.org/pub/mirrors/maven2/xmlunit/xmlunit/1.2/
xmlunit.jar=xmlunit-1.2.jar