#   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 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
